Swapの中身を特定する方法

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。

関連記事

コメント

この記事へのコメントはありません。

おすすめ記事

  1. 【多段SSH】公開鍵認証で中継サーバー経由のログインが簡単!

  2. インターネットに繋いだサーバーで最初にやらなければならない設定

  3. Swapの中身を特定する方法

  4. Linuxを極めるならコマンドよりも〇〇が先だ!!

  5. お名前ドットコムのDNS設定方法