LinuxでCPU使用率が高いときの確認方法|top・psで原因プロセスを調べる
Linuxサーバーを運用していると、「サイトの表示が遅い」「SSHの操作が重い」「サーバーのCPU使用率が高い」といった問題が発生することがあります。
CPU使用率が高いからといって、すぐにCPUそのものが不足しているとは限りません。
アプリケーションの処理、データベース、Dockerコンテナ、cronによる定期処理など、特定のプロセスがCPUを大量に消費している可能性があります。
そのため、まずはどのプロセスがCPUを使っているのかを確認することから始めます。
LinuxのCPU使用率が高いときに確認する順番
CPU負荷を調べるときは、次のような順番で確認すると分かりやすくなります。
- CPU全体の負荷を確認する
- CPUを大量に使っているプロセスを確認する
- 特定のプロセスが継続して負荷をかけているか確認する
- アプリケーションやDockerなど原因を調べる
- cronやバックアップなど定期処理を確認する
- 必要に応じてプロセスを停止・再起動する
いきなりプロセスを終了するのではなく、まず原因を確認することが重要です。
topコマンドでCPU使用率を確認する
LinuxでCPU負荷を確認するときによく使われるのがtopです。
top
実行すると、CPU使用率やメモリ使用量、実行中のプロセスなどがリアルタイムで表示されます。
例えば、
%Cpu(s): 35.0 us, 5.0 sy, 0.0 ni, 60.0 id
のような情報が表示されます。
ここで、
us:ユーザープロセスによるCPU使用sy:カーネルなどシステム処理によるCPU使用id:CPUがアイドル状態の割合wa:I/O待ちの割合
などを確認できます。
CPU使用率が高いときは、プロセス一覧も合わせて確認してください。
CPUを使っているプロセスを確認する
topの画面では、CPU使用率の高いプロセスを確認できます。
通常はCPU使用率が高いプロセスが上のほうに表示されます。
特定のプロセスが大量にCPUを使用している場合、
PID USER %CPU COMMAND
1234 www-data 95.0 php-fpm
のように表示されます。
この場合、php-fpmがCPUを大量に消費していることが分かります。
ただし、一時的にCPUを使っただけの可能性もあるため、しばらく画面を確認して継続しているかを見ることも大切です。
psコマンドでCPU使用率を確認する
topを終了してから確認したい場合は、psも便利です。
CPU使用率の高いプロセスを確認するなら、
ps aux --sort=-%cpu | head
とします。
CPU使用率の高いプロセスから順番に表示されます。
もう少し多く確認したい場合は、
ps aux --sort=-%cpu | head -20
とします。
これによって、現在CPUを多く使用しているプロセスを一覧で確認できます。
CPU使用率が高いプロセスを特定する
CPU負荷が高いときは、まずPIDを確認します。
例えば、
PID
1234
というプロセスが高負荷になっているとします。
次に、
ps -p 1234 -o pid,ppid,user,%cpu,%mem,etime,cmd
とすると、そのプロセスについて詳しく確認できます。
ここでは、
- PID
- 親プロセス
- 実行ユーザー
- CPU使用率
- メモリ使用率
- 実行時間
- 実行コマンド
などを確認できます。
特にPPIDとCMDを見ると、どのサービスや処理から起動されたプロセスなのかを調べる手がかりになります。
CPU使用率が高いプロセスをすぐにkillしてもいい?
CPUを大量に使っているプロセスを見つけると、すぐにkillしたくなるかもしれません。
しかし、プロセスによっては、
- Webサイト
- データベース
- バックアップ
- バッチ処理
- cron
- Dockerコンテナ
など、サーバーに必要な処理が動いている可能性があります。
そのため、まずプロセスの正体を確認してください。
サービスとして管理されている場合は、
sudo systemctl status サービス名
などで状態を確認します。
アプリケーションがCPUを使っている場合
WebアプリケーションのプロセスがCPUを大量に使用している場合は、アプリケーション側の処理を確認します。
例えば、
- 無限ループ
- 大量のデータ処理
- 重いAPI処理
- 異常なアクセス
- キャッシュの問題
- データベースへの大量クエリ
などが原因になることがあります。
CPU使用率だけを見て原因を断定せず、アプリケーションのログも確認しましょう。
DockerコンテナのCPU使用率を確認する
Dockerを使用している場合は、docker statsが便利です。
docker stats
コンテナごとのCPU使用率やメモリ使用量などを確認できます。
例えば、
CONTAINER CPU %
web 85.20%
db 12.40%
のようになっていれば、webコンテナがCPUを多く使用していることが分かります。
その場合は、
docker logs コンテナ名
でログを確認し、コンテナ内のアプリケーションに異常がないか調べます。
cronが原因になっていないか確認する
CPU使用率が一定の時間帯だけ高くなる場合は、cronによる定期処理も確認してください。
例えば、
- バックアップ
- ログ処理
- データ集計
- ファイル変換
- バッチ処理
などが定期的に実行されている可能性があります。
cronの設定を確認する場合は、
crontab -l
を実行します。
rootのcronを確認する場合は、
sudo crontab -l
です。
CPU負荷が高くなった時刻とcronの実行時刻が一致していないか確認すると、原因を絞り込みやすくなります。
CPU負荷が高い時間帯を確認する
現在のCPU使用率だけでは、過去に何が起きたのか分からないことがあります。
例えば、「毎日午前3時になるとサーバーが重くなる」という場合です。
このようなケースでは、cronやバックアップなどの定期処理を調べる必要があります。
ログや監視ツールを利用して、CPU負荷が上がる時間帯を確認してください。
現在の状態だけで判断せず、いつから・どの時間帯に・どの程度の負荷が発生しているのかを見ることが重要です。
load averageも確認する
topには、CPU使用率だけでなくload averageも表示されます。
例えば、
load average: 4.20, 3.80, 2.50
のように表示されます。
これは一定期間のシステム負荷を示す指標です。
ただし、load averageだけを見て「CPUが100%だから危険」と単純に判断することはできません。
CPUコア数やI/O待ちなども関係するため、CPU使用率やプロセスの状態と合わせて確認してください。
CPU使用率が高くてもCPUが原因とは限らない
サーバーが重いときは、CPUだけでなくメモリやディスクI/Oも確認する必要があります。
例えば、
CPU
↓
問題なし
Memory
↓
不足
Disk I/O
↓
高負荷
というケースもあります。
CPU使用率だけを見て原因を決めると、別の問題を見逃す可能性があります。
必要に応じて、
free -h
でメモリを確認したり、
iostat -xz 1
でディスクI/Oを確認したりしてください。
CPU負荷が高いときの確認コマンド
| 確認内容 | コマンド |
|---|---|
| CPU全体の状態 | top |
| CPU使用率順に表示 | ps aux --sort=-%cpu | head |
| 特定プロセスの詳細 | ps -p PID -o pid,ppid,user,%cpu,%mem,etime,cmd |
| Dockerの負荷 | docker stats |
| メモリ確認 | free -h |
| ディスクI/O確認 | iostat -xz 1 |
| cron確認 | crontab -l |
| rootのcron確認 | sudo crontab -l |
| サービス確認 | sudo systemctl status サービス名 |
CPU負荷が高いときの注意点
CPU使用率だけで原因を決めない
CPU使用率が高くても、正常な処理によって一時的に負荷が上がっている可能性があります。
バックアップやバッチ処理など、予定された処理であれば必ずしも異常とは限りません。
いきなりkillしない
CPUを大量に使っているプロセスを見つけても、すぐに終了させるのは避けましょう。
重要なサービスやデータベースを停止すると、別の障害につながる可能性があります。
まずプロセスの正体と実行目的を確認してください。
CPUコア数も確認する
CPU使用率の見え方は、CPUコア数によっても異なります。
サーバーのCPU情報を確認する場合は、
nproc
でCPUの論理プロセッサ数を確認できます。
lscpuを使えば、さらに詳しいCPU情報を確認できます。
lscpu
まとめ
LinuxサーバーのCPU使用率が高いときは、まずどのプロセスがCPUを消費しているのかを確認することが重要です。
最初にtopやpsでCPU負荷の高いプロセスを特定し、その後にアプリケーション、Docker、cron、データベースなどの原因を調べます。
また、サーバーが重い原因はCPUだけとは限りません。
メモリ不足やディスクI/Oが原因になっている場合もあるため、必要に応じてfreeやiostatなども確認してください。
原因を確認せずにプロセスを終了するのではなく、いつから負荷が高くなったのか、どのプロセスが原因なのか、正常な処理なのかを順番に切り分けることが大切です。
LinuxでCPU使用率を確認するにはどうすればいいですか?
topコマンドを使うと、CPU使用率やプロセスの状態をリアルタイムで確認できます。
CPU使用率の高いプロセスを一覧で確認したい場合は、ps aux --sort=-%cpu | headも便利です。
CPU使用率が100%になるのは異常ですか?
必ずしも異常とは限りません。
CPUを集中的に使用する処理が正常に実行されている場合もあります。ただし、サーバーの応答が遅いなどの問題が同時に発生している場合は、原因を確認する必要があります。
CPU使用率が高いプロセスをkillしてもいいですか?
重要なサービスやデータベースなどの可能性があるため、プロセスの正体を確認せずに終了するのは避けたほうが安全です。
まずPIDや実行コマンド、親プロセス、サービスの状態などを確認してください。
CPU使用率が低いのにサーバーが重いのはなぜですか?
メモリ不足やディスクI/O、ネットワーク、アプリケーション側の処理など、CPU以外に原因がある可能性があります。
free -hやiostat -xz 1なども使って、複数の項目を確認してください。
Linuxサーバーが重い・遅いときの原因と確認方法|CPU・メモリ・ディスクを順番に調べる
