【Linux】 CPU使用率をモニタリングする方法とコマンドの解説

■ 目次


 

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 average1、5、15分間0.40,0.35,0.33
  • load average について
    • 実行待ちプロセス数の平均
    • ロードアベレージは、値が大きければ大きいほど急激に負荷が掛かっている事がわかる
    • ただしロードアベレージが絶対では無い
ロードアベレージについては、別の機会に紹介予定
 

3.2. 【2行目 : Tasks: の解説】

項目説明
totalプロセスの総数
running実行中のプロセス数
sleepingスリープ状態のプロセス数
stopped停止状態のプロセス数
zombieゾンビ状態のプロセス数
 

3.3. 【3行目 : %Cpu(s): の解説】

項目説明
ususerのプログラムによる使用率
sysystemのプログラムによる使用率
ninice指定プログラムの使用率
idシステムアイドル率
waIOの終了待ちのCPU使用率
hiハードウェア割り込み要求によるCPU使用率
siソフトウェア割り込み要求によるCPU使用率
stゲストOSが割り当て要求をしたが、割り当ててもらえなかったCPU使用率
 

3.4. 【4行目 : KiB Mem : の解説】

項目説明
totalメモリ合計量
used使用中のメモリ量
free未使用のメモリ量
buffersバッファに使用されているメモリ量
 

3.5. 【5行目 : KiB Swap: の解説】

項目説明
totalswap領域の合計量
used使用中のスワップ領域
free未使用のスワップ領域
cachedキャッシュされているスワップ領域
 

3.6. 【7行目】 各種フィールドについて

項目説明予備欄
PIDプロセスIDで定期的に同じ番号が使用される。1から開始
PPID親プロセスIDの事
USER実行するタスク所有者
PRタスクの優先度
NInice値
VIRTタスクが使用してる仮想メモリの総量(kb)VIRT=SWAP+RES
RES常駐タスク。タスクが使用しているスワップされていない物理メモリ(kb)RES=CODE+DATA
SHR共有メモリサイズ(kb)
Sプロセスの状態【S プロセス状態について】を参照
%CPUCPU使用率
%MEM物理メモリメモリ使用率(RES)
TIME+CPU時間(1/100単位)
COMMANDコマンド名/プログラム名
  • S プロセス状態について
    • D : 割り込み要求不可
    • R : 実行中
    • S : スリープ状態
    • T : 停止中
    • Z : ゾンビモード
    • W : (スワップアウト)
    • I : (多分・・・アイドル状態の事をさしてる)
    • N : ナイス値がプラス+の状態
    • < : ナイス値がマイナス-の状態
 

3.7. 【豆技】 プロセスのソート方法

項目コマンド
CPUShift + p
PIDShift + n
メモリーShift + m
実行時間Shift + t
 

3.8. 【豆技】 core別に表示する方法

top コマンドを実行後に 1 と入力
 

4. vmstat

 コマンドは、仮想メモリの総計、スワップ、ディスクIO、およびCPU使用率に関する情報を表示出来ます。
 

4.1. 各項目の解説

タイトル項目説明備考欄
procsr書き込みの時間を待っているプロセス数不明
b割り込み不可能なスリープ状態のプロセス数
memoryswpd仮想メモリの量
free空きメモリの量
buffバッファに用いられてるメモリの量
cacheキャッシュに用いられてるメモリの量
inact非アクティブなメモリの量-a を付与後に表示
activeアクティブなメモリの量-a を付与後に表示
swapsiディスクからスワップインされているメモリの量/s
soディスクにスワップしてるメモリの量/s
iobiブロックデバイス(HDD)から受け取ったブロック(blocks/s)
boブロックデバイスに送られたブロック(blocks/s)
systemin1秒あたりの割り込み回数。クロック割り込みも含む←不明
cs1秒あたりのコンテキストスイッチの回数不明
cpuusカーネルコード以外の実行に使用した時間(ユーザー時間とniceも含む)
syカーネルコードの実行に使用した時間(システム時間)
idIO待ち時間を含めてアイドル時間
waIO待ち時間
stTime stolen from a virtual machine
 

4.2. オプションの使い方

 [オプション] [何秒間隔] [何回]
  • vmstat -a 2 4
    • 2秒間隔で計4回、非/アクティブなメモリ情報を表示する(オプション無しのデータも含めて)
 

4.3. ディスク モード欄の説明

  • 【オプション -d】で使用します。
タイトル項目説明備考欄
readstotal読み込みに成功した総数
mergedグループ化された読み込み数
sectors読み込みに成功したセクタ数
ms読み込みに使用した時間(ミリ秒)
writestotal書き出しに成功した総数
mergedグループ化された書き込み数
sectors書き出しに成功したセクタ数
ms書き出しに使用した時間
IOcur現在実行中の I/O 数
secI/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 バイト単位に切り替えて表示