Linuxでパフォーマンス解析¶
計算機リソースの使用状況を計測¶
vmstat¶
計算機全体のCPU、メモリ、IOの使用状況をモニターするコマンド。
オプションに指定した時間間隔、回数で計測を実施します。回数を省略すると中断するまで実行し続けます。
~$ vmstat 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 526516 4252 659540 0 0 4803 396 940 701 41 5 53 1 0 0 0 0 513696 4252 659560 0 0 38 0 359 377 4 0 96 0 0 0 0 0 513792 4252 659560 0 0 0 3 221 350 0 0 100 0 0 0 0 0 513728 4252 659560 0 0 0 0 214 344 0 0 100 0 0 :
| 項目略名 | 内容 |
|---|---|
| r | 実行待ちのプロセス数 |
| b | 中断不可の待機中のプロセス数 |
| swpd | 仮想メモリ使用量(KB)。スワップしているサイズです。 |
| free | 未使用メモリ使用量(KB)。OSは空きメモリをcacheに振るので、free+cacheが空きメモリとなります。 |
| buff | バッファに使用しているメモリ量(KB) |
| cache | キャッシュに使用しているメモリ量(KB) |
| si | ディスクから読み出したスワップメモリ量(KB/s) |
| so | ディスクに書き込みしたスワップメモリ量(KB/s) |
| bi | ブロックデバイスから受け取ったブロック数(block/s) |
| bo | ブロックデバイスに送ったブロック数(block/s) |
| in | クロック割込みを含む割込み回数(秒間) |
| cs | コンテクストスイッチ回数(秒間) |
| us | 非カーネルコードの実行に費やした時間(ユーザー時間の%) |
| sy | カーネルコードの実行に費やした時間(システム時間の%) |
| id | 何も実行していない時間(%) |
| wa | IO待ち時間(%) |
| st | 仮想マシン上で実行している時にCPU割当が失われた時間(%) |
コマンド実行結果のファイル保存¶
vmstatの実行結果をリダイレクトでファイルに保存する場合、タイムスタンプがないので、vmstatを開始した時刻を覚えておき、実行間隔からタイムスタンプを計算する方法がありますが、得てして時刻の記録を忘れます。そこで、
~$ (date & vmstat 5) >> vmstat-5.log
のように、vmstatを開始する時刻をdateコマンドでファイルにリダイレクトします。
または、vmstatの各出力行の頭にタイムスタンプを追加します。
~$ vmstat 5 | awk '{print strftime("%H:%M:%S"), $0; system("")}' > vmstat-5.log
- awkは入力をバッファリングするので、vmstat を Ctrl-Cで中断するとバッファサイズ内に残って出力されていない情報が消えてしまいます。そこで、各行を出力する都度に system("") でバッファをフラッシュさせます。
top¶
プロセスごとのCPU、メモリ使用状況を使用率の大きい順にソートして表示します。
| 項目略名 | 内容 |
|---|---|
| VIRT | プロセスに割当(予約)したメモリ量 |
| RES | 物理メモリを使っている量 |
| SHR | RESのうち、共有メモリに使われている量 |
| %CPU | CPUの処理のうちそのプロセスに使った割合 |
| %MEM | 物理メモリの容量のうちそのプロセスのRESの割合 |