freeでシステムの空きメモリーと使用済みメモリー量を表示させることができます。
free -h
total used free shared buff/cache available
Mem: 1.9Gi 530Mi 93Mi 116Mi 1.3Gi 1.1Gi
Swap: 4.0Gi 667Mi 3.3Gi
でも本当に知りたいのは、スワップアウトしているプロセスが何かということではないですか?
要はSwapのusedの値667MiBと表示されているその内訳を知りたいんです。
Swapのusedの詳細
どのプロセスがSwapアウトしているのか確認する方法を見ていきましょう。
VmSwapの値を確認
Swapアウトの値は、/proc/${PID}/statusのVmSwapをチェックします。
例えば、MySQLがSwapアウトしているだろうと察しが付いている場合。
最初にmysqlのプロセスIDをチェックします。
pgrep mysql
MySQLのプロセスIDが919だったとしたら/proc/919/statusのVmSwapにSwapアウトの値が入っているので以下のコマンドで確認します。
grep VmSwap /proc/919/status
Swapアウトしていれば次のような結果が表示されます。
VmSwap: 503688 kB
Swapプロセスの表示
いちいちプロセスIDをチェックして、ちまちまとVmSwapをgrepしなくてもいい方法を紹介します。
Swapプロセス10件を降順表示
find /proc -maxdepth 2 -path "/proc/[0-9]*/status" -readable -exec awk -v FS=":" '{process[$1]=$2;sub(/^[ \t]+/,"",process[$1]);} END {if(process["VmSwap"] && process["VmSwap"] != "0 kB") printf "%10s %-30s %20s\n",process["Pid"],process["Name"],process["VmSwap"]}' '{}' \; | awk '{print $(NF-1),$0}' | sort -hr | head | cut -d " " -f2-
919 mysqld 503688 kB
3029707 auth 46120 kB
765 firewalld 43120 kB
787 tuned 14752 kB
736 polkitd 6628 kB
2172738 httpd 5060 kB
3092336 httpd 4492 kB
775 NetworkManager 3832 kB
3034793 httpd 3504 kB
3033243 httpd 3360 kB
Swapプロセス全てを降順表示
find /proc -maxdepth 2 -path "/proc/[0-9]*/status" -readable -exec awk -v FS=":" '{process[$1]=$2;sub(/^[ \t]+/,"",process[$1]);} END {if(process["VmSwap"] && process["VmSwap"] != "0 kB") printf "%10s %-30s %20s\n",process["Pid"],process["Name"],process["VmSwap"]}' '{}' \; | awk '{print $(NF-1),$0}' | sort -hr | cut -d " " -f2-
スワップアウトしている全てのプロセスを表示するには、先のコマンドからheadを除外します。
コメント