はじめに
この記事では、vmstatコマンドの実行結果から、CPUの仕事を図解で理解します。
CPUはOSの中心とはわかっているけど、
「どんな処理をしているのかはよくわからない…」
という方に向けた内容です。
この記事を読むことで、CPUの基本とvmstatのCPU項目(us, sy, wa, id, st)が何を意味しているのかは理解できるようになります。
CPUの基本〜おさらい〜
はじめに、CPUの基本をおさらいします。
主記憶装置とは?
まず、CPUを理解するためには主記憶装置を知っている必要があります。
主記憶装置とは、命令やデータを格納しておく装置を指します。
主記憶装置の内部は細かく区分けされていて、各区画にアドレス(番地)が割り振られています。
CPUとは?
主記憶装置から「命令」と「データ」を取り出して計算を行い、計算が完了したらその結果(データ)を記憶装置に格納する
ことになります。

処理の結果をどこに格納するのかというと、レジスタと呼ばれるCPU内の記憶装置に格納されます。
CPUとは?
コンピューター内のいろいろな命令を処理する処理装置。
vmstatで見るCPUの仕事
ここからは、vmstatでCPUの状態を見ていきます。
vmstatでは、-----cpu-----の欄で、CPUが処理する命令のざっくりとした内訳が見れます。

1. CPUの仕事内容
CPU 100%(時間)
│
┌────────┼────────┐────────┐
│ │ │ │
ユーザ カーネル 待ち・空き 他VMに奪われた
(us) (sy) (wa, id) (st)
CPUの時間は、上のように分かれていて、それぞれの枠で作業をしています。
仮想環境では、vCPUの割り当てなど物理CPUが共有資源のため、他VMにCPUが奪われる場合があります。
その時間がst(steal)です。
【CPUの1日の仕事】
┌──────────────────────┐
│ ① ユーザ作業 (us) │ ← アプリ・プログラムを実行
│ │
├──────────────────────┤
│ ② システム作業 (sy) │ ← OS・カーネルの処理
│ │
├──────────────────────┤
│ ③ I/O待ち (wa) │ ← ディスク・ネット待ち
│ │
├──────────────────────┤
│ ④ 何もしてない (id) │ ← アイドル
└──────────────────────┘
│ ④ 何もしてない (st) │ ← 他のVMに奪われている
└──────────────────────┘
これらの時間を割合すると、100%となります。
2.それぞれの意味(イメージ)
それぞれの命令の内訳と、数値が大きいとどういう問題があるのかというところを
まとめてみていきます。
| 項目 | 意味 | 具体例 | 現場での見方 |
|---|---|---|---|
| us | アプリケーションがCPUを使っている時間 | Java、Python、Web、DB | ビジネス処理が重い |
| sy | OS・カーネルがCPUを使う時間 | システムコール、割り込み、メモリ管理、ドライバ | OS・ネットワーク・I/O処理 |
| wa | ディスク・ネットワーク待ち | DBのディスク待ち、ファイル読み込み | ストレージやDBが遅い |
| id | CPUが完全に空いている | 何も処理していない | サーバに余裕あり |
| st | 仮想環境で他VMにCPUを奪われた時間 | CPUオーバーコミット、ノイジーネイバー | 仮想基盤の問題 |
vmstatのCPU欄は、CPUがどの仕事に時間を使っているかの内訳で、
「CPUが遅い理由」を切り分けるヒントとなります。
-
waが高い:CPUではなくストレージが原因 -
stが高い:仮想基盤の問題
まとめ
CPUの時間は5つに分かれます。
- us:アプリ
- sy:OS
- wa:I/O待ち
- id:空き
- st:仮想化競合
何に時間を使っているかを見ることで、問題切り分けに役立ちます。
