
もっち
大手SIerに18年勤務。オンプレ・クラウド計200台規模の大規模インフラ(10システム)を統括する現役のサービスマネージャーです。
システム運用・インフラ技術、マインドセット、キャリア戦略など、現場で役立つ情報を若手エンジニアへ向けて発信中。


もっち
大手SIerに18年勤務。オンプレ・クラウド計200台規模の大規模インフラ(10システム)を統括する現役のサービスマネージャーです。
システム運用・インフラ技術、マインドセット、キャリア戦略など、現場で役立つ情報を若手エンジニアへ向けて発信中。
インフラエンジニアとしてキャリアを積むと、必ず直面する「数字の矛盾」があります。
「CPU使用率は低いのに、アプリケーションの応答が極端に遅い」
「ロードアベレージは異常に高いが、サーバー自体は負荷が低そうに見える」
これらの現象を「OSの機嫌が悪い」で片付けてはいけません。そこには必ず、OSのスケジューラ、スレッド管理、そしてハードウェア特性に裏打ちされた「論理」が存在します。
本記事では、インフラエンジニアが「数字を眺める人」から「システム内部を透視する人」へステップアップするために必要な、CPUパフォーマンスの深層を解説します。
パフォーマンスを論理的に理解する第一歩は、OSのスケジューラを理解することです。
現代のCPUはマルチコア化が進んでいますが、物理的な1コア(あるいは1スレッド)が「ある瞬間に」実行できる命令セットは、厳密には一つだけです。OSはミリ秒単位で実行するプロセスを切り替えることで、あたかも複数の処理が同時に動いているように見せています。
この切り替え作業をコンテキストスイッチと呼びます。CPUが処理対象を切り替える際、レジスタの内容を保存し、次のプロセスの情報をロードします。
標準的なツール(Linuxの vmstat や Windowsの Performance Monitor)でこの数値が異常に高い場合、システムは「実処理」ではなく「交通整理(切り替え作業)」に忙殺されていることを意味します。
サーバーの状態を確認する際、Windowsに慣れている人がLinuxの数値を見ると混乱することがあります。その原因は、両者の「負荷」の測り方の違いにあります。
CPU使用率は、WindowsでもLinuxでも基本的に同じ考え方です。
Windowsの場合: タスクマネージャーで真っ先に見る「%」です。これが100%に張り付くと「重い」と判断します。
対して、Linuxで重視されるロードアベレージは「プロセス数(数)」で表されます。
ここが最大のポイントです。WindowsのCPU使用率には現れにくい「ディスクI/O待ち」が、Linuxのロードアベレージには加算されます。
| OS | 指標 | 含まれるもの | 特徴 |
| Linux | ロードアベレージ | CPU実行中 + CPU待ち + ディスクI/O待ち | ストレージが遅いだけでも数値が跳ね上がる |
| Windows | CPU使用率 | CPU実行中のみ | ディスクが遅い場合は「ディスク使用率」として別管理される |
つまり、Linuxにおいて「CPU使用率は10%なのに、ロードアベレージが10を超えている」という現象が起きたら、それはCPUの計算能力不足ではなく、「HDDやSSDの読み書き待ちで、処理が大渋滞している」ことを意味します。
Windowsには「ロードアベレージ」という直球の指標はありませんが、性能モニター(perfmon)にある「System\Processor Queue Length(プロセッサキューの長さ)」がそれに近いです。
ただし、Windowsのキューの長さは「純粋にCPUを待っているスレッド数」のみを指すことが多く、Linuxのように「ディスク待ち」までごちゃ混ぜに評価しない傾向があります。
「数字の意味」がOSによって微妙に異なることを知っておくと、トラブルシューティングの精度が劇的に上がります。
の高さだけでなく、この Queue Length が継続的に「コア数 + 2」を超えているかを確認する必要があります。タスクマネージャーのグラフを見るだけでは、インフラエンジニアとしては不十分です。
パフォーマンス分析の世界的権威、Brendan Gregg氏が提唱する「USEメソッド」と呼ばれる考え方があります。
この考え方をCPUに適用することで、場当たり的な調査から脱却できます。
| 指標 | 意味 | 確認すべき標準ツール |
| Utilization (使用率) | 一定期間、CPUが稼働していた時間の割合 | Linux: top, Windows: タスクマネージャー |
| Saturation (飽和度) | 待ち行列が発生している度合い | Linux: uptime, Windows: Perfmon(Queue Length) |
| Errors (エラー) | ハードウェア起因などのエラー | Linux: dmesg, Windows: イベントビューアー |
「使用率は高いが、飽和していない(待ちがない)」のであれば、それはリソースを効率的に使い切っている健全な状態かもしれません。逆に「使用率は低いが、飽和している」のであれば、それはCPU以外の要因(I/Oやロック競合)を疑うべき明白なサインです。
オンプレミス環境と異なり、クラウドやコンテナ環境では、OSのメトリクスが嘘をつくことがあります。
AWSなどの仮想環境で top を叩いた際、%st という項目に注目してください。
DockerやKubernetes環境では、CPU使用率が50%程度でも、アプリケーションのレスポンスが極端に劣化することがあります。
これは、CFS(Completely Fair Scheduler)クォータによる制限です。コンテナに設定されたCPUリミットを短時間に使い果たすと、OSはミリ秒単位でそのプロセスの実行を停止させます。この微細な停止は、秒単位の「平均使用率」には現れにくいため、非常に厄介なボトルネックとなります。
ここで、現場でよくある「論理的ボトルネック」の例を挙げます。
事象:
8コアのDBサーバー。全体のCPU使用率は25%前後で安定しているが、特定のクエリ処理が非常に遅い。
調査プロセス:
top で全体の負荷を確認。25%という数字に余裕を感じる。top 実行中に 1 キーを押し、コアごとの詳細を表示。対策:
サーバーのコア数を増やす(スケールアップ)のは無意味です。1コアあたりのクロック周波数を上げるか、アプリケーションをマルチスレッド化する(スケールアウト)しか解決策はありません。
CPUパフォーマンスの分析とは、単に top の一番上の数字を報告することではありません。
18年の経験から言えるのは「標準ツールを論理的に組み合わせるだけで、解決できないパフォーマンス問題はほとんどない」ということです。ぜひ、今日から「平均」という言葉を疑い、数字の裏にある論理を追いかけてみてください。
この記事が気に入ったら
フォローしてね!
現役サービスマネージャーが解説する「プロセス管理」の真髄|大規模システムを支えるOSの基礎知識
メモリ使用率80%で慌てない!歴18年のプロが教える「SWAP・ページング」の本質と現場の監視術(Linux/Windows対応)