【Linux】 CPU使用率をモニタリングする方法とコマンドの解説
■ 目次
■ 目次1. はじめに2. 紹介一覧3. top3.1. 【1行目 : top – の解説】3.2. 【2行目 : Tasks: の解説】3.3. 【3行目 : %Cpu(s): の解説】3.4. 【4行目 : KiB Mem : の解説】3.5. 【5行目 : KiB Swap: の解説】3.6. 【7行目】 各種フィールドについて3.7. 【豆技】 プロセスのソート方法3.8. 【豆技】 core別に表示する方法4. vmstat4.1. 各項目の解説4.2. オプションの使い方4.3. ディスク モード欄の説明■ vmstatの各種オプションについて4.4. 【オプション -a】4.5. 【オプション -f】4.6. 【オプション -t】4.7. 【オプション -n】4.8. 【オプション -s】4.9. 【オプション -d】4.10. 【オプション -p [パーティション]】4.11. 【オプション -S [k/K/m/M]】
1. はじめに
CPU使用率で全てが解決する訳ではありません。要因解決の1つの手段です。
また、CPU使用率は、中央処理装置またはCPUによって処理されている作業またはタスクの合計に他なりません。
全てのプログラマーやインフラエンジニアが作業中のシステムのCPU使用率を監視する為の一般的な方法を事前に知っていることは非常に良いことだと思っています。
ここでは、Linuxを使った紹介になりますが、Windowsやクラウドサービスのメトリクスなどは、またの次回へ!
情報が古かったりします。
2. 紹介一覧
- top
- htop
- nmon
- vmstat
以上の4つほどを紹介していきますが、実際に自分が使った感想や色々なサイトから学んだ方法記載していきます。
3. top
コマンドは、システムパフォーマンスを監視するための最も古いコマンドまたはユーティリティの1つです。基本的には、あらゆるLinuxオペレーティングシステムに組み込まれているユーティリティです。
代表的な、タスク数・ユーザ数・CPU使用率・ロードアベレージ・メモリ使用量やアクティブなプロセスをリストなどを表示してくれます。
3.1. 【1行目 : top – の解説】
項目 | 説明 | 予備欄 |
---|---|---|
現在時刻 | 今の時間 | 23:12:52 |
up | 起動してからの時間 | 20日と53分 |
users | ログインしているユーザー数 | 1人 |
load average | 1、5、15分間 | 0.40,0.35,0.33 |
- load average について
- 実行待ちプロセス数の平均
- ロードアベレージは、値が大きければ大きいほど急激に負荷が掛かっている事がわかる
- ただしロードアベレージが絶対では無い
ロードアベレージについては、別の機会に紹介予定
3.2. 【2行目 : Tasks: の解説】
項目 | 説明 |
---|---|
total | プロセスの総数 |
running | 実行中のプロセス数 |
sleeping | スリープ状態のプロセス数 |
stopped | 停止状態のプロセス数 |
zombie | ゾンビ状態のプロセス数 |
3.3. 【3行目 : %Cpu(s): の解説】
項目 | 説明 |
---|---|
us | userのプログラムによる使用率 |
sy | systemのプログラムによる使用率 |
ni | nice指定プログラムの使用率 |
id | システムアイドル率 |
wa | IOの終了待ちのCPU使用率 |
hi | ハードウェア割り込み要求によるCPU使用率 |
si | ソフトウェア割り込み要求によるCPU使用率 |
st | ゲストOSが割り当て要求をしたが、割り当ててもらえなかったCPU使用率 |
3.4. 【4行目 : KiB Mem : の解説】
項目 | 説明 |
---|---|
total | メモリ合計量 |
used | 使用中のメモリ量 |
free | 未使用のメモリ量 |
buffers | バッファに使用されているメモリ量 |
3.5. 【5行目 : KiB Swap: の解説】
項目 | 説明 |
---|---|
total | swap領域の合計量 |
used | 使用中のスワップ領域 |
free | 未使用のスワップ領域 |
cached | キャッシュされているスワップ領域 |
3.6. 【7行目】 各種フィールドについて
項目 | 説明 | 予備欄 |
---|---|---|
PID | プロセスIDで定期的に同じ番号が使用される。 | 1から開始 |
PPID | 親プロセスIDの事 | |
USER | 実行するタスク所有者 | |
PR | タスクの優先度 | |
NI | nice値 | |
VIRT | タスクが使用してる仮想メモリの総量(kb) | VIRT=SWAP+RES |
RES | 常駐タスク。タスクが使用しているスワップされていない物理メモリ(kb) | RES=CODE+DATA |
SHR | 共有メモリサイズ(kb) | |
S | プロセスの状態 | 【S プロセス状態について】を参照 |
%CPU | CPU使用率 | |
%MEM | 物理メモリメモリ使用率(RES) | |
TIME+ | CPU時間(1/100単位) | |
COMMAND | コマンド名/プログラム名 |
- S プロセス状態について
- D : 割り込み要求不可
- R : 実行中
- S : スリープ状態
- T : 停止中
- Z : ゾンビモード
- W : (スワップアウト)
- I : (多分・・・アイドル状態の事をさしてる)
- N : ナイス値がプラス+の状態
- < : ナイス値がマイナス-の状態
3.7. 【豆技】 プロセスのソート方法
項目 | コマンド |
---|---|
CPU | Shift + p |
PID | Shift + n |
メモリー | Shift + m |
実行時間 | Shift + t |
3.8. 【豆技】 core別に表示する方法
top コマンドを実行後に 1 と入力
4. vmstat
コマンドは、仮想メモリの総計、スワップ、ディスクIO、およびCPU使用率に関する情報を表示出来ます。
4.1. 各項目の解説
タイトル | 項目 | 説明 | 備考欄 |
---|---|---|---|
procs | r | 書き込みの時間を待っているプロセス数 | 不明 |
b | 割り込み不可能なスリープ状態のプロセス数 | ||
memory | swpd | 仮想メモリの量 | |
free | 空きメモリの量 | ||
buff | バッファに用いられてるメモリの量 | ||
cache | キャッシュに用いられてるメモリの量 | ||
inact | 非アクティブなメモリの量 | -a を付与後に表示 | |
active | アクティブなメモリの量 | -a を付与後に表示 | |
swap | si | ディスクからスワップインされているメモリの量/s | |
so | ディスクにスワップしてるメモリの量/s | ||
io | bi | ブロックデバイス(HDD)から受け取ったブロック(blocks/s) | |
bo | ブロックデバイスに送られたブロック(blocks/s) | ||
system | in | 1秒あたりの割り込み回数。 | クロック割り込みも含む←不明 |
cs | 1秒あたりのコンテキストスイッチの回数 | 不明 | |
cpu | us | カーネルコード以外の実行に使用した時間(ユーザー時間とniceも含む) | |
sy | カーネルコードの実行に使用した時間(システム時間) | ||
id | IO待ち時間を含めてアイドル時間 | ||
wa | IO待ち時間 | ||
st | Time stolen from a virtual machine |
4.2. オプションの使い方
[オプション] [何秒間隔] [何回]
- vmstat -a 2 4
- 2秒間隔で計4回、非/アクティブなメモリ情報を表示する(オプション無しのデータも含めて)
4.3. ディスク モード欄の説明
- 【オプション -d】で使用します。
タイトル | 項目 | 説明 | 備考欄 |
---|---|---|---|
reads | total | 読み込みに成功した総数 | |
merged | グループ化された読み込み数 | ||
sectors | 読み込みに成功したセクタ数 | ||
ms | 読み込みに使用した時間(ミリ秒) | ||
writes | total | 書き出しに成功した総数 | |
merged | グループ化された書き込み数 | ||
sectors | 書き出しに成功したセクタ数 | ||
ms | 書き出しに使用した時間 | ||
IO | cur | 現在実行中の I/O 数 | |
sec | I/Oに使用した時間(秒) |
■ vmstatの各種オプションについて
4.4. 【オプション -a】
- アクティブ/非アクティブなメモリも表示
- active/inact が表示
4.5. 【オプション -f】
- ブート後のfork数を表示
4.6. 【オプション -t】
- タイムスタンプを付けて表示
- 査時にタイムスタンプを載せて置くと、コマンドの実行時間が可視化
4.7. 【オプション -n】
ヘッダの表示を無くす
4.8. 【オプション -s】
- 各種のイベントカウンタとメモリの総計を表示
- 上手く活用出来たら、素晴らしそう
4.9. 【オプション -d】
- ディスクの総計を表示
- iostat と表示の仕方が違うのかな?不明
4.10. 【オプション -p [パーティション]】
指定したパーティションの詳細な総計を表示
4.11. 【オプション -S [k/K/m/M]】
出力を、k:1000/K:1024/m:1000000/M:1048576 バイト単位に切り替えて表示