CPU負荷調査の全体像とコマンドの役割
CPU負荷の調査は、いきなり特定のプロセスを終了させるのではなく、サーバー全体の状態からプロセス単位へ段階的に絞り込みます。基本的には、CPUコア数の確認、ロードアベレージの確認、高負荷プロセスの特定、プロセス詳細の確認という順番です。
| コマンド名 | 確認対象 | 調査での役割 |
|---|---|---|
| nproc | 利用可能なプロセッサ数 | ロードアベレージを評価する基準を確認する |
| uptime | 稼働時間、ログインユーザー数、ロードアベレージ | サーバー全体の負荷を確認する |
| top | CPU使用率、メモリ使用率、PIDなど | 高負荷のプロセスをリアルタイムに探す |
| ps | プロセスのユーザー、親プロセス、状態、コマンドなど | 対象プロセスの役割や状態を確認する |
| kill | 指定したPIDへのシグナル送信 | 影響を確認したうえでプロセス終了を検討する |
flowchart TD
A[nprocでCPUコア数を確認] --> B[uptimeでロードアベレージを確認]
B --> C[topで高負荷プロセスを特定]
C --> D[psでPIDと実行内容を確認]
D --> E{終了が必要か}
E -- いいえ --> F[継続監視または追加調査]
E -- はい --> G[影響確認後にkillを検討]図を表示できませんでした。Mermaidコードを確認してください。
CPU使用率はプロセスやCPUの使用状況を示す一方、ロードアベレージは実行待ちや、LinuxではI/O待ちに関係する状態も反映し得ます。どちらか一つの数値だけで原因を断定せず、複数の情報を組み合わせて判断します。
nprocで利用可能なCPUコア数を確認する
まず、調査対象のシェルから利用可能なプロセッサ数を確認します。
nproc
# 出力例: 環境に応じたプロセッサ数が1行で表示されますロードアベレージは、CPUコア数と照らし合わせることで負荷の大きさを相対的に読み取れます。ただし、仮想マシンやコンテナ、CPU affinity、cgroupの制限などがある環境では、nprocの値が物理CPU全体のコア数と一致するとは限りません。
uptimeでロードアベレージとサーバー全体の状態を確認する
次に、uptimeで稼働時間、ログインユーザー数、ロードアベレージを確認します。一般的な表示では、ロードアベレージが直近1分、5分、15分の順に示されます。
uptime
# 出力例: 現在時刻、稼働時間、ログインユーザー数、ロードアベレージが表示されます1分の値だけが高ければ一時的な上昇、5分や15分も高ければ継続的な負荷である可能性を検討します。nprocで確認したプロセッサ数と比較しながら、負荷がCPUコア数に対してどの程度かを確認してください。
topでCPU使用率の高いプロセスを特定する
サーバー全体の負荷が高い場合は、topを起動してプロセス単位の状況を確認します。CPU使用率、メモリ使用率、PID、プロセスの状態などを確認し、CPU使用率の高いプロセスが継続して存在するかを見ます。
top
# 操作例: qで終了します。表示項目や並び順は環境や設定によって異なります。瞬間的にCPU使用率が高いだけのプロセスもあるため、画面を少し観察して継続性を確認します。ロードアベレージが高い一方でCPU使用率が目立たない場合は、I/O待ちやプロセスの待ち状態など、別の要因も調査候補にします。
psで対象プロセスを詳しく確認し、必要ならkillを検討する
topで見つけたPIDについて、psで実行ユーザー、親プロセス、状態、実行コマンドなどを確認します。次の例では、指定したPIDを対象に情報を表示します。
PID=1234
ps -p "$PID" -o pid,ppid,user,stat,etime,cmd
# 出力例: 指定したPIDの親PID、ユーザー、状態、経過時間、コマンドなどが表示されます確認時は、そのプロセスが何の処理を担っているか、同じコマンドのプロセスが複数存在しないか、サービス管理下にあるかを調べます。psは実行時点のスナップショットであるため、topで見た状況と変化していないかも確認します。
プロセスを終了する必要がある場合でも、PID、業務影響、必要な権限、サービスの再起動設定を先に確認してください。killは指定したプロセスへシグナルを送るコマンドで、通常の終了要求にはTERMが使われます。強制終了に相当するKILLは後処理の機会を与えないため、安易に使わないようにします。
PID=1234
# 実行前にPID、対象サービス、業務影響を確認してください。
kill -TERM "$PID"
# 期待される挙動: 対象プロセスへTERMシグナルを送ります。実行結果や終了可否はプロセスの状態と権限に依存します。