swapが使用しているプロセスのTOP10を表示する

swapを使用しているプロセスを確認する

最近、サーバーのメモリが逼迫してswapを使っている場合があり、どのプロセスが使用しているか確認したいのでその方法を調べました

/proc 以下のプロセス情報で確認する

使用しているプロセスの各種情報は、/proc/[プロセスID]/status のファイルに保存されています。下記ではmysqlの情報です。この中でswapを使用している情報を知りたい場合は、「VmSwap」の箇所をgrep すると使用しているswapのメモリ量が表示されます

$ cat /proc/23320/status 
Name:   mysqld
Umask:  0006
State:  S (sleeping)
Tgid:   23320
Ngid:   0
Pid:    23320
PPid:   1150
TracerPid:      0
Uid:    27      27      27      27
Gid:    27      27      27      27
FDSize: 1024
Groups: 27 
VmPeak:  4109128 kB
VmSize:  3881728 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:   2828968 kB
VmRSS:   2751828 kB

# swapの使用量を調べる
$ grep VmSwap /proc/23320/status 
VmSwap:   113608 kB

この /proc/*/status を「VmSwap」でgrepして、下記のようにソートすればswapが使用しているプロセスのTOP10が表示されます。但しプロセスIDでの表示となります

$ grep VmSwap /proc/*/status | sort -nr -k 2 | head -10
/proc/23320/status:VmSwap:        113336 kB
/proc/30588/status:VmSwap:         59808 kB
/proc/1016/status:VmSwap:          12552 kB
/proc/723/status:VmSwap:            8216 kB
/proc/30893/status:VmSwap:          6364 kB
/proc/30587/status:VmSwap:          5916 kB
/proc/30838/status:VmSwap:          4188 kB
/proc/30825/status:VmSwap:          4164 kB
/proc/717/status:VmSwap:            3288 kB
/proc/1019/status:VmSwap:           2712 kB

プロセスIDだと、どのプロセスかわからないので、プロセス名にするには以下のコマンドとなります

 grep VmSwap /proc/*/status | sort -k 2 -nr | cut -d"/" -f3 | grep -e '^[0-9]*$' | xargs -I{} ps u -p{} --no-headers
mysql    23320  7.6 45.0 3881728 2750800 ?     Sl   Jun28 1305:56 /usr/libexec/mysqld
root      1016  0.0  0.0 583952   776 ?        Ssl  Mar14  42:18 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
polkitd    723  0.0  0.0 614436  1340 ?        Ssl  Mar14  17:34 /usr/lib/polkit-1/polkitd --no-debug

「smem」コマンドを利用して、swapを使用しているプロセスを確認する

「smem」という、メモリ使用状況を監視および分析するためのツールがあります。このsmem を利用してswapを使用しているプロセスを確認します

標準では、smemは、インストールされていないと思いますので、yum, dnfコマンドでsmemをインストールします

# yumコマンドの場合
$ sudo yum install smem

# dnfコマンドの場合
$ sudo dnf install smem

sudo smem -rs swap」で、使用しているプロセスが表示されます。
オプションの詳細は下記となります

  • -r:ソートのキーとして使用するメモリリソースを指定します。例えば、-rs swap とすると、Swap使用量でソートされます。
  • -s:指定したメモリリソースの使用量を表示します。例えば、-rs swap とすると、Swap使用量が表示されます。
$ sudo smem -rs swap
  PID User     Command                         Swap      USS      PSS      RSS 
 1073 mysql    /usr/libexec/mariadbd --bas    59000   102892   103204   108168 
 1044 apache   php-fpm: pool www              23444    18740    25470   101100 
13697 apache   php-fpm: pool www              23396    19084    26278   104896 
 1032 apache   php-fpm: pool www              23384    16736    23583   100920 
 1050 apache   php-fpm: pool www              23380    21396    27737   101688 
 1487 apache   php-fpm: pool www              23376    18840    25763   103624 
 1057 apache   php-fpm: pool www              23364    20292    27765   106860 
 6802 apache   php-fpm: pool www              23360    16988    23718   100332 
113955 apache   php-fpm: pool www              23336    16692    27072   105348

swapを使用しているプロセスのTOP10を表示するには、headコマンドを下記のように利用します

$ sudo smem -rs swap | head -n 11
  PID User     Command                         Swap      USS      PSS      RSS 
 1073 mysql    /usr/libexec/mariadbd --bas    58952   103212   103525   108488 
 1044 apache   php-fpm: pool www              23428    18740    25470   101100 
13697 apache   php-fpm: pool www              23380    19084    26282   104904 
 1032 apache   php-fpm: pool www              23368    18760    25607   102948 
 1050 apache   php-fpm: pool www              23364    21396    27736   101688 
 1487 apache   php-fpm: pool www              23360    19220    26143   104004 
 1057 apache   php-fpm: pool www              23348    20292    27765   106864 
 6802 apache   php-fpm: pool www              23344    16692    23423   100040 
113955 apache   php-fpm: pool www              23320    19116    29489   107764 
26745 apache   php-fpm: pool www              22548    18680    25848   101176

 

スポンサーリンク

0
0

LinuxCentOS 7,CentOS 8,CentOS 9

Posted by admin