takasta ne olduğunu nasıl kontrol edebilirim?


15

Benim sistemde kullanılan takas bir miktar var:

undefine@uml:~$ free
             total       used       free     shared    buffers     cached
Mem:      16109684   15848264     261420     633496      48668    6096984
-/+ buffers/cache:    9702612    6407072
Swap:     15622140        604   15621536

Takasta ne olduğunu nasıl kontrol edebilirim?

İşlemler yoluyla kontrol etmeye çalışıyorum, ancak VmSwap sistemindeki her pid için 0:

undefine@uml:~$ awk '/VmSwap/ {print $2}' /proc/*/status |uniq
0

Takasta başka ne olabilir? Ben tmpfs hakkında düşündüm - ama ben tmpfs-es tüm dosyaları yeniden - ve takas boyutunu temizlemez.


Yanıtlar:


9

smembunun için standart bir araçtır. Temiz ve basit.

Debian tabanlı bir sistemde, paket yöneticisi aracılığıyla kurun:

 sudo apt-get install smem

Sistemimden bir örnek (kırpılmış) çıktı:

$ smem -s swap -t -k -n
  PID User     Command                         Swap      USS      PSS      RSS 
  831 1000     /bin/bash                          0     3.8M     3.8M     5.5M 
 3931 1000     bash /usr/bin/sage -c noteb   276.0K     4.0K    20.0K     1.2M 
17201 1000     /usr/bin/dbus-launch --exit   284.0K     4.0K     8.0K   500.0K 
17282 1000     /usr/bin/mate-settings-daem   372.0K    11.0M    11.7M    21.8M 
17284 1000     marco                         432.0K    16.7M    18.1M    29.5M 
17053 1000     mate-session                  952.0K     3.3M     3.5M     9.2M 
 3972 1000     python /usr/lib/sagemath/sr     2.7M   101.8M   102.1M   104.3M 
-------------------------------------------------------------------------------
  141 1                                        5.2M     3.9G     4.0G     4.5G 

6
Ancak, VmSwapsatırda gösterilen değerden başka bir şey döndürüyor /proc/PID/statusmu? Soru daha güzel bir ekran istemiyor, işlem verileri dışında takasta ne olabileceğini soruyor.
Gilles 'SO- kötü olmayı bırak'

1
smem bana greping proc: undefine @ uml: ~ $ sudo smem -c swap | uniq -c 1 takastan daha yararlı bir şey vermiyor 1 Swap 227 0
undefine

2

Dün ihtiyaçlarım için araştırmaya başladım, şu ana kadar bulduğum şey:

SWAP_USED = Kullanılmış_by_Processes + SwapCached + Part_of_Tmpfs + bir şey_seçin

Kısa hikaye:

Used_by_Processes - bellekten tamamen çıkarılmış veriler.

SwapCached - diske değiştirilmiş, ancak hala bellekte kalan veriler.

Part_of_Tmpfs - tmpfs verilerinin bir kısmı.

Uzun Hikaye:

Used_by_Processes - bunu yanlış hesaplamak için yayınlanan birçok talimat vardır ;) Örneğin, tüm VmSwapgirişleri /proc/*/statusveya Swapgirişleri özetlersek /proc/*/smaps- bir fazla tahmin alırız (paylaşılan değiştirilmiş sayfalar bir kereden fazla sayılabilir). rootKullanıcıdan veya işletim sistemimizden çalıştırmazsak , hafife alma işlemi sessizce döndürülür. Paylaşılan sayfalar tanımlamanın uygun bir yol yok, ama aynı 'haritaların' sıçraması çok daha iyi verir tahminini diğer yaklaşımlara göre daha: (O notu cataşağıda yararsız değildir ve aslında bir ihtiyacı 2>/dev/null)

[root@a:~]# cat /proc/*/status|awk '      /^VmSwap/{           s+=$2       }END{print s}'
32048
[root@a:~]# cat /proc/*/smaps|awk '         /^Swap/{           s+=$2       }END{print s}'
32048
[root@a:~]# cat /proc/*/smaps|awk '/-/{r=$0}/^Swap/{if(R[r]!=1)s+=$2;R[r]=1}END{print s}'
14940
[root@a:~]# free -k|grep -e Swap -e used
             total       used       free     shared    buffers     cached
Swap:      8388600      15508    8373092

SwapCached - bu basittir ve temiz bir şekilde çıkarılabilir /proc/meminfo. Bazı insanlar bunun "kullanılmış" takas olarak sayılmasını beklemezler, çünkü hem RAM'de hem de Swap'ta aynı sayfanın yinelenen (kirli olmayan) bir kopyası her iki tarafta da oldukça hızlı bir şekilde serbest bırakılabilir (talep olursa) kopyalardan biri "serbest bırakıldı".

Part_of_Tmpfs - parlak tarafı, tüm tmpfs verileriniz birkaç gün dokunulmadığında ve swappinesssıfır olmadığında - tüm tmpfs'nin değiştirilmesi (ve son kullanılan veriler için tersi) olasılığıdır. Dezavantajı, yeterli RAM varsa, eşik veya ne kadarının takas edildiğinin yüzdesini güvenilir bir şekilde hesaplamak için hiçbir API bulamadım - tüm tmpfs verilerini kopyalayabilir /dev/nullve böylece ne kadarının değiştiğine dair bir ipucu alabiliriz.

Tmpfs boyutunun hesaplanması sırasında yapılan yaygın hatalar - /dev/shmyalnızca yinelenen dosya başına tarama ile yapılandırılan veya yapmaya çalışan tek tmpfs olduğu varsayılır (yalnızca uygulamalar gizli dosyaları atlamaz veya olmayanlardan da yapar root, aynı zamanda takasları da kaldırır) bazı sayfalarda gezinme). Çok daha iyi bir yol iyi eski kullanmaktır df.

something_else - diff 385 MBaşağıdaki " " bölümüne bakın, çekirdek kaynaklarına dalmak gerekir. Senaryomu görüntüle:

#!/bin/bash
TMPFS=`df -kP           |awk '          /^tmpfs/{          s+=$3       }END{print int( s/1024)}'`
PROCS=`cat /proc/*/smaps|awk '/-/{r=$0} /^Swap/{if(R[r]!=1)s+=$2;R[r]=1}END{print int( s/1024)}'`
SCACH=`cat /proc/meminfo|awk '          /^SwapCached/                      {print int($2/1024)}'`
TOTAL=`free -k          |awk '          /^Swap/                            {print int($3/1024)}'`
echo  -e " df $TMPFS\t    smaps $PROCS \tSwapCache $SCACH\t| $TOTAL\tswap | diff $[TOTAL-TMPFS-PROCS-SCACH]\tMB"

ve farklı kutulardan çıktı:

xa002:   df 0       smaps 271   SwapCache 3858  | 4120  swap | diff -9  MB
sg003:   df 0       smaps 234   SwapCache 3876  | 4111  swap | diff 1   MB
sg001:   df 0       smaps 245   SwapCache 3845  | 4093  swap | diff 3   MB
sg002:   df 0       smaps 244   SwapCache 3843  | 4091  swap | diff 4   MB
dm001:   df 2       smaps 971   SwapCache 728   | 1707  swap | diff 6   MB
hm012:   df 270     smaps 161   SwapCache 29    | 454   swap | diff -6  MB
hm003:   df 274     smaps 142   SwapCache 27    | 440   swap | diff -3  MB
hm006:   df 262     smaps 150   SwapCache 29    | 437   swap | diff -4  MB
hm002:   df 265     smaps 120   SwapCache 28    | 412   swap | diff -1  MB
hm009:   df 258     smaps 124   SwapCache 33    | 410   swap | diff -5  MB
hm011:   df 262     smaps 118   SwapCache 28    | 406   swap | diff -2  MB
hm008:   df 245     smaps 122   SwapCache 32    | 396   swap | diff -3  MB
hm005:   df 247     smaps 120   SwapCache 33    | 396   swap | diff -4  MB
dp001:   df 0       smaps 0     SwapCache 0     | 386   swap | diff 386 MB
hm014:   df 184     smaps 134   SwapCache 34    | 343   swap | diff -9  MB
hm007:   df 0       smaps 132   SwapCache 32    | 158   swap | diff -6  MB
bm002:   df 0       smaps 121   SwapCache 25    | 141   swap | diff -5  MB
dm002:   df 2       smaps 70    SwapCache 71    | 139   swap | diff -4  MB
bm001:   df 3       smaps 102   SwapCache 28    | 131   swap | diff -2  MB
bm004:   df 0       smaps 98    SwapCache 29    | 126   swap | diff -1  MB
hm013:   df 0       smaps 100   SwapCache 30    | 124   swap | diff -6  MB
bm006:   df 0       smaps 103   SwapCache 15    | 122   swap | diff 4   MB
hm010:   df 0       smaps 102   SwapCache 24    | 122   swap | diff -4  MB
hm001:   df 0       smaps 101   SwapCache 25    | 121   swap | diff -5  MB
bm003:   df 0       smaps 98    SwapCache 15    | 107   swap | diff -6  MB
bm005:   df 0       smaps 70    SwapCache 17    | 85    swap | diff -2  MB
sg004:   df 0       smaps 72    SwapCache 14    | 83    swap | diff -3  MB
sg001:   df 0       smaps 41    SwapCache 33    | 78    swap | diff 4   MB
sg005:   df 0       smaps 59    SwapCache 20    | 75    swap | diff -4  MB
sg003:   df 0       smaps 58    SwapCache 18    | 72    swap | diff -4  MB
sg006:   df 0       smaps 56    SwapCache 13    | 65    swap | diff -4  MB
sg002:   df 0       smaps 54    SwapCache 12    | 64    swap | diff -2  MB
xa001:   df 0       smaps 56    SwapCache 5     | 55    swap | diff -6  MB

Ve bonus olarak küçük bir deney:

[root@hm012:~]# df -h|grep -e '^Filesystem' -e '^tmpfs'
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                  12G  271M   12G   3% /dev/shm
tmpfs                 8.0G   84K  8.0G   1% /tmp
[root@hm012:~]# ./get_swap.sh
 df 270     smaps 161   SwapCache 29    | 454   swap | diff -6  MB
[root@hm012:~]# rm -rf /dev/shm/*
[root@hm012:~]# df -h|grep -e '^Filesystem' -e '^tmpfs'
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                  12G     0   12G   0% /dev/shm
tmpfs                 8.0G   84K  8.0G   1% /tmp
[root@hm012:~]# ./get_swap.sh
 df 0       smaps 161   SwapCache 29    | 185   swap | diff -5  MB

PS, yukarıda belirtilen yaklaşımın yanı sıra - KB'nin MB'ye yuvarlanması, RAM'in blok boyutları ile Takas vb. bir dereceye kadar yardımcı olur :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.