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 VmSwap
girişleri /proc/*/status
veya Swap
girişleri özetlersek /proc/*/smaps
- bir fazla tahmin alırız (paylaşılan değiştirilmiş sayfalar bir kereden fazla sayılabilir). root
Kullanı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 cat
aş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 swappiness
sı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/null
ve 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/shm
yalnı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 MB
aş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 :)
VmSwap
satırda gösterilen değerden başka bir şey döndürüyor/proc/PID/status
mu? Soru daha güzel bir ekran istemiyor, işlem verileri dışında takasta ne olabileceğini soruyor.