LinuxでCPU使用率が高止まりする原因と調査手順

  • URLをコピーしました!
目次

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を使っているのかを冷静に見極め、適切な対応を行いましょう。

目次