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
物理メモリー(Mem)とスワップ(Swap)の概要を確認することができます。
Swapのusedの値が667MiBと表示されているのが気になりますね。
こういう時、知りたいのはSwapのusedの中身。
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アウトプロセス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-
Swapアウトしている全てのプロセスを表示したい時は、先のコマンドからheadを除外すればokay。
コメント