ケース
自分が作ったバッチを動かし始めたら、サーバが重くなった。
なぜか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使用サイズ