プロセスのメモリ使用状況を確認したい

ケース

自分が作ったバッチを動かし始めたら、サーバが重くなった。
なぜかswapが食いつぶされ始めた。

確認方法

プロセスを確認
$ ps aux
 USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
・・・
 root      1243  0.0 12.4 439760 193312 ?       Ssl  May05  10:05 /root/script/***batch
 root      1281  0.0  0.0 108292   276 ?        S    May05   0:00 /bin/sh /usr/local/mysql/bin/mysqld
 mysql     2006  0.0  0.9 1009224 9656 ?        Sl   May05  15:38 /usr/local/mysql/bin/mysqld --based
 root      2054  0.0  0.0  64588   232 ?        Ss   May05   0:00 /usr/sbin/saslauthd -m /var/run/sas
 root      2056  0.0  0.0  64588    16 ?        S    May05   0:00 /usr/sbin/saslauthd -m /var/run/sas
 root      2057  0.0  0.0  64588    20 ?        S    May05   0:00 /usr/sbin/saslauthd -m /var/run/sas
 root      2058  0.0  0.0  64588    16 ?        S    May05   0:00 /usr/sbin/saslauthd -m /var/run/sas
 root      2060  0.0  0.0  64588    16 ?        S    May05   0:00 /usr/sbin/saslauthd -m /var/run/sas
 root      2134  0.0  0.0  79072   508 ?        Ss   May05   0:31 /usr/libexec/postfix/master
 postfix   2143  0.0  0.0  79324   716 ?        S    May05   0:14 qmgr -l -t fifo -u
 root      2168  0.0  0.0 117208   488 ?        Ss   May05   0:37 crond
 root      2179  0.0  0.0  21456   184 ?        Ss   May05   0:00 /usr/sbin/atd
 root      2200  0.0  0.0   4060   192 tty1     Ss+  May05   0:00 /sbin/mingetty /dev/tty1
 root      2201  0.0  0.0   4076   216 ttyS0    Ss+  May05   0:00 /sbin/agetty /dev/ttyS0 115200 vt10
 root     14426  0.0  0.3  98148  3944 ?        Ss   12:25   0:00 sshd: root@pts/0
 root     14430  0.0  0.1 108472  1860 pts/0    Ss   12:25   0:00 -bash
 postfix  16980  0.0  0.3  79152  3252 ?        S    16:14   0:00 pickup -l -t fifo -u
 root     17034  0.0  0.1 110236  1124 pts/0    R+   16:18   0:00 ps aux
 named    29231  0.0  0.7 249336  7232 ?        Ssl  May22   0:19 /usr/sbin/named -u named -t /var/na

/root/script/***batchをみてみる。 /root/script/***batchはRSSが193312kB確保していることがわかる。

該当のプロセスのステータスを確認する。
# cat /proc/1243/status
Name:   /root/script/***batch
State:  S (sleeping)
Tgid:   1243
Pid:    1243
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
Utrace: 0
FDSize: 64
Groups:
VmPeak:   499856 kB
VmSize:   439760 kB
VmLck:         0 kB
VmHWM:    301112 kB
VmRSS:    193312 kB
VmData:   393112 kB
VmStk:       140 kB
VmExe:       144 kB
VmLib:      9012 kB
VmPTE:       748 kB
VmSwap:   105240 kB    ←ここがswap使用容量
Threads:        2
SigQ:   1/7818
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: fffffffe7ff1a234
SigIgn: 0000000000000000
SigCgt: 0000000180005803
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed:   3
Cpus_allowed_list:      0-1
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        624317
nonvoluntary_ctxt_switches:     132741

ここで確認するのは、VmRSS、VmSwap
VmRSS: 126820 kB VmSwap: 170212 kB このプロセスは、はswapにデータが移動されていたことがわかる。
なんとかswapは少なめで済んでそう。他に原因があるため、同様の方法で調査をしていく。

 

コマンド解説

ps aux

項目	内容
------  --------------
USER	プロセスの所有ユーザー
PID	プロセス番号
%CPU	CPUの占有率
%MEM	実メモリでの占有率
VSZ	仮想分も含めた使用サイズ(Kバイト)
RSS	実メモリ上の使用サイズ(Kバイト)
TTY	端末名
STAT	プロセスの状態|br| R 稼動中|br| S 一時停止中|br| D 停止不可能で一時停止|br| T 終了処理中|br| Z ゾンビプロセス(すでに実体は無い)|br| W 実メモリ上に無くて,スワップアウトしている|br| N nice値
START	プロセスの開始時刻
TIME	プロセスの総実行時間
COMMAND	実行コマンド名とパス(シェル表記の場合もあり)

/proc/*/status

項目	内容
------  --------------
VmRSS	実メモリ使用サイズ
VmSwap	swap使用サイズ

 

おすすめの記事