CPU使用率が高止まりしている状態とは
CPU使用率の高止まりとは、一時的なスパイクではなく、以下のような状態が継続している状況を指します。
- CPU使用率が常時80〜100%付近で推移している
- 処理が終わってもCPU使用率が下がらない
- サービス応答が遅くなっている
- ロードアベレージが継続的に高い
この状態を放置すると、アプリケーション遅延・タイムアウト・サービス停止につながるため、早期の原因特定が重要です。
CPU使用率が高止まりする主な原因
1. 特定プロセスによるCPU使い切り
最も多い原因が、一部のプロセスがCPUを占有しているケースです。
- アプリケーションのバグ
- 無限ループ処理
- 想定以上のリクエスト集中
特にJava、Python、バッチ処理などでは頻発します。
2. マルチコアを使い切っている
CPU使用率が100%と表示されていても、実際には1コアのみを使い切っている場合があります。
シングルスレッド設計のアプリケーションでは、CPUコア数を増やしても解決しないことがあります。
3. I/O待ち(iowait)が多い
CPU使用率が高く見えても、実際にはディスクI/O待ちが原因の場合があります。
この場合、CPU自体は処理できる状態ですが、ディスク応答待ちで処理が詰まっています。
4. システム負荷(ロードアベレージ)の増加
CPU使用率とあわせて確認すべき指標がロードアベレージです。
ロードアベレージがCPUコア数を大きく超えている場合、CPUリソース不足が発生しています。
5. OSやミドルウェアの異常動作
以下のようなケースもCPU高止まりの原因になります。
- cronジョブの暴走
- ログ出力過多
- 監視エージェントの不具合
CPU使用率が高い時の調査手順(実務フロー)
① topコマンドで全体状況を把握
top
まずはtopで以下を確認します。
- CPU使用率(us / sy / id / wa)
- ロードアベレージ
- CPU使用率が高いプロセス
特にwa(iowait)が高い場合は、CPUではなくディスクが原因の可能性があります。
② CPU使用率が高いプロセスを特定
ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head
CPU使用率が高いプロセスを一覧で確認し、どの処理が原因かを特定します。
③ マルチコア使用状況の確認
mpstat -P ALL
特定のCPUコアだけが100%になっていないかを確認します。
④ I/O待ちの確認
vmstat 1
以下の項目を重点的に見ます。
- wa(I/O wait)
- r(実行待ちプロセス数)
⑤ 過去ログ・定期処理の確認
CPU使用率が上がり始めた時間帯に、以下が動作していないか確認します。
- cron
- バッチ処理
- 定期ジョブ
対応・対策の考え方
一時対応
- 問題プロセスの再起動
- 負荷の高い処理の一時停止
恒久対応
- アプリケーションの処理見直し
- CPUコア数増強
- 非同期処理・分散処理の導入
よくある勘違い
CPU使用率が高いからといって、必ずしもCPU増設で解決するわけではありません。
I/O待ち、シングルスレッド処理、アプリケーション設計など、原因を正しく切り分けることが重要です。
まとめ
LinuxのCPU使用率高止まりは、原因を整理して順序立てて調査すれば、確実に切り分けが可能です。
本記事で紹介したtop → ps → mpstat → vmstatの流れは、障害対応の基本フローとして覚えておくと非常に役立ちます。
CPU高負荷は「現象」ではなく「結果」です。 何がCPUを使っているのかを冷静に見極め、適切な対応を行いましょう。
