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

でも本当に知りたいのは、スワップアウトしているプロセスが何かということではないですか?

要は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を除外します。

関連記事

コメント

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

おすすめ記事

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

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

  3. Swapアウトしているプロセスを特定する方法

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

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