性能を評価していてシステムレベルでの動作が重いと思われたのでCPUの利用状況を調べてみたのでその方法を書きます。
CPU利用状況を調べるの使用したのはmpstatである。
mpstat [options] [
interval:実行間隔(秒)
count:実行する回数
optionsを何も指定しないと全CPUのトータルが出力される。
CPUごとの利用状況が知りたい場合は、
-P ALL
を指定する。
[-P ALL]を指定したときの実行結果
----------------------------------------------------
07:09:21 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:09:26 PM all 3.72 0.00 0.17 0.01 0.00 0.00 0.00 0.00 0.00 96.10
07:09:26 PM 0 79.23 0.00 4.44 0.00 0.00 0.00 0.00 0.00 0.00 16.33
07:09:26 PM 1 76.26 0.00 3.42 0.00 0.00 0.00 0.00 0.00 0.00 20.32
07:09:26 PM 2 87.20 0.00 3.86 0.00 0.00 0.00 0.00 0.00 0.00 8.94
07:09:26 PM 3 32.33 0.00 0.80 0.00 0.00 0.00 0.00 0.00 0.00 66.87
07:09:26 PM 4 86.84 0.00 4.05 0.00 0.00 0.00 0.00 0.00 0.00 9.11
07:09:26 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
07:09:26 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
07:09:26 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
07:09:26 PM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
----------------------------------------------------
システムレベルの利用状況が多い時にどのシステムコールが呼ばれているか調査するのに以下のコマンドを使用した。
strace -cf -p pid -o 出力ファイル名
pidはpsコマンドで調べる。
以下のように結果が出力される。
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
79.41 615.893782 54601 11280 1155 futex
19.12 148.318638 1128 131501 mprotect
1.46 11.286654 7616 1482 nanosleep
0.01 0.072216 1313 55 mmap
0.00 0.020947 997 21 munmap
0.00 0.007072 884 8 mremap
0.00 0.002639 2639 1 restart_syscall
------ ----------- ----------- --------- --------- ----------------
100.00 775.601948 144348 1155 total
多く呼ばれているシステムコールが何かを見てボトルネックとなっている処理を推測できました。
timeoutコマンドを併用するとある時間範囲の測定ができます。
timeout 10 strace -cf -p pid -o 出力ファイル名
これで10秒間だけ監視できます。