メモリ不足やCPU使用率の上昇など、サーバのリソース不足が発生した時に、dstatで原因プロセスを確認できることがあります。
今回は、小ネタですが、メモリやCPU、ディスクI/Oなどの確認方法をメモとして記録しておきます。
メモリの使用状況を確認する
ページングやSWAP、仮想メモリなど、一番メモリを使っているプロセスを確認します。
下記の例では、php-fpmがメモリを一番消費していました。
$ dstat -t -gs --mem --vm --ipc --top-mem ----system---- ---paging-- ----swap--- ------memory-usage----- -----virtual-memory---- --sysv-ipc- --most-expensive- date/time | in out | used free| used buff cach free|majpf minpf alloc free|msg sem shm| memory process 16-02 17:50:33| 0 0 | 119M 858M| 322M 8336k 74.4M 84.3M| 2 10 0 12 | 0 2 0|php-fpm: poo29.0M 16-02 17:50:34| 0 0 | 119M 858M| 322M 8336k 74.4M 84.1M| 0 0 0 12 | 0 2 0|php-fpm: poo29.0M 16-02 17:50:35| 0 0 | 119M 858M| 322M 8336k 74.4M 84.1M| 0 0 0 11 | 0 2 0|php-fpm: poo29.0M
この結果を元に、php-fpmを再起動すると、メモリ不足が解消しました。
ディスクI/Oを確認する
I/Oを発生させているプロセスを確認します。
下記の例では、ddコマンドによるI/Oが発生していることが分かります。
$ dstat -tdng --file --lock --top-io --top-bio ----system---- -dsk/total- -net/total- ---paging-- --filesystem- ---file-locks-- ----most-expensive---- ----most-expensive---- date/time | read writ| recv send| in out |files inodes|pos lck rea wri| i/o process | block i/o process 22-02 13:47:47|4008B 5491B| 0 0 | 315B 470B| 800 6913 |3.0 3.0 0 6.0|crond 6312B 14B|init 1056B 686B 22-02 13:47:48| 0 0 | 132B 1248B| 0 0 | 800 7001 |3.0 3.0 0 6.0|sshd: root@1142B 1140B| 22-02 13:47:51| 104k 12M| 212B 672B| 0 0 | 800 7002 |3.0 3.0 0 6.0|dd 87M 86M|dd 52k 91M 22-02 13:47:52|8192B 235M| 80B 506B| 0 0 | 800 7007 |3.0 3.0 0 6.0|dd 118M 118M|dd 0 113M
CPU使用率を確認する
CPUの負荷状況を確認します。
先ほどと同じ状況下では、ddコマンドのCPU使用率が高いことが分かります。
$ dstat -taf --top-cpu date/time |usr sys idl wai hiq siq| read writ| recv send| in out | int csw | cpu process 22-02 13:50:11| 0 0 100 0 0 0|2013B 4008B| 0 0 | 315B 470B| 19 41 |mysqld 0.0 22-02 13:50:16| 1 0 99 0 0 0| 0 32k| 40B 410B| 0 0 | 27 55 | 22-02 13:50:17| 0 17 20 61 2 0| 24k 105M| 264B 708B| 0 0 |2726 372 |dd 15 22-02 13:50:18| 0 4 0 96 0 0| 0 61M| 40B 426B| 0 0 |1525 238 |dd 3.0
dstatは他にも色んなことが調べられますが、この3つだけでも結構便利です。