Saya baru mulai memeriksanya kemarin untuk kebutuhan saya, berikut ini yang saya temukan sejauh ini:
SWAP_USED = Used_by_Processes + SwapCached + Part_of_Tmpfs + something_else
Cerita pendek:
Used_by_Processes - data yang telah ditukar keluar dari memori sepenuhnya.
SwapCached - data yang telah ditukar ke disk, tetapi masih tersimpan di memori.
Part_of_Tmpfs - sebagian dari data tmpfs.
Cerita panjang:
Used_by_Processes - ada banyak instruksi yang diterbitkan tentang cara salah menghitung-ini;) Misalnya jika kita meringkas semua VmSwap
entri dari /proc/*/status
atau Swap
entri dari /proc/*/smaps
- kita akan mendapatkan perkiraan yang terlalu tinggi (halaman yang ditukar bersama dapat dihitung lebih dari satu kali). Jika kami tidak menjalankannya dari root
pengguna atau OS kami - perkiraan yang lebih rendah akan dikembalikan secara diam-diam. Saya tidak memiliki cara yang tepat untuk mengidentifikasi halaman bersama, tetapi percikan 'peta' yang sama memberikan perkiraan yang jauh lebih baik daripada pendekatan lain: (perhatikan bahwa di cat
bawah ini tidak berguna dan benar-benar membutuhkan a 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 - ini mudah dan dapat diekstraksi dengan bersih /proc/meminfo
. Beberapa orang tidak akan berharap ini dihitung sebagai swap "bekas", karena salinan duplikat (tidak kotor) dari halaman yang sama di RAM dan Swap dapat dibebaskan di kedua sisi secara instan (jika terjadi permintaan), sehingga membuat salah satu salinan "dibebaskan".
Part_of_Tmpfs - sisi baiknya adalah ketika semua data tmpf Anda banyak-hari-tidak tersentuh dan swappiness
tidak nol - sangat mungkin bahwa seluruh tmpfs swapping-out (dan sebaliknya untuk data yang baru saja digunakan). Kelemahannya adalah saya tidak menemukan API untuk andal menghitung ambang atau persentase dari berapa banyak yang ditukar, meskipun jika ada cukup RAM - kita dapat menyalin seluruh data tmpfs ke dalam /dev/null
dan dengan demikian mendapatkan beberapa petunjuk tentang seberapa banyak itu dipertukarkan.
Kesalahan umum yang dibuat selama perhitungan ukuran tmpfs adalah - dengan asumsi bahwa /dev/shm
hanya tmpfs yang dikonfigurasi atau mencoba melakukannya dengan pemindaian per-file rekursif (tidak hanya implementasi yang cenderung menghilangkan file tersembunyi atau melakukannya dari non- root
, tetapi juga un-swaps beberapa halaman selama melintasi). Cara yang jauh lebih mudah adalah dengan menggunakan yang lama df
.
something_else - lihat " diff 385 MB
" di bawah ini, perlu menyelam ke sumber kernel. Lihat skrip saya:
#!/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"
dan output dari kotak yang berbeda:
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
Dan eksperimen kecil sebagai bonus:
[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 selain dari perkiraan yang disebutkan di atas - ada sumber kesalahan lain, seperti pembulatan KB menjadi MB, kemungkinan teoritis ketidakcocokan antara ukuran blok RAM dan Swap, dll. Saya tidak yakin ini mencakup semuanya, tetapi berharap ini mencakup membantu sampai batas tertentu :)
VmSwap
baris/proc/PID/status
? Pertanyaannya bukan meminta tampilan yang lebih cantik, melainkan menanyakan apa yang bisa ditukar selain dari data proses.