OS

LinuxサーバーのCPU負荷を調査する方法―nproc・uptime・top・psで基本切り分け

LinuxサーバーのCPU負荷を、CPUコア数・ロードアベレージ・プロセス情報の順に確認し、nproc、uptime、top、psを使って原因を切り分ける手順を解説します。

この記事でわかること

  • CPUコア数を基準にロードアベレージを確認し、サーバー全体の負荷を把握できる。
  • topでCPU使用率の高いプロセスを見つけ、psで対象プロセスの詳細を調査できる。
  • プロセスを終了する場合は、影響範囲を確認したうえでkillを慎重に使う。

CPU負荷調査の全体像とコマンドの役割

CPU負荷の調査は、いきなり特定のプロセスを終了させるのではなく、サーバー全体の状態からプロセス単位へ段階的に絞り込みます。基本的には、CPUコア数の確認、ロードアベレージの確認、高負荷プロセスの特定、プロセス詳細の確認という順番です。

コマンド名 確認対象調査での役割
nproc利用可能なプロセッサ数ロードアベレージを評価する基準を確認する
uptime稼働時間、ログインユーザー数、ロードアベレージサーバー全体の負荷を確認する
topCPU使用率、メモリ使用率、PIDなど高負荷のプロセスをリアルタイムに探す
psプロセスのユーザー、親プロセス、状態、コマンドなど対象プロセスの役割や状態を確認する
kill指定したPIDへのシグナル送信影響を確認したうえでプロセス終了を検討する
CPU負荷調査で使う主なコマンド

CPU使用率はプロセスやCPUの使用状況を示す一方、ロードアベレージは実行待ちや、LinuxではI/O待ちに関係する状態も反映し得ます。どちらか一つの数値だけで原因を断定せず、複数の情報を組み合わせて判断します。

nprocで利用可能なCPUコア数を確認する

まず、調査対象のシェルから利用可能なプロセッサ数を確認します。

BASH
nproc
# 出力例: 環境に応じたプロセッサ数が1行で表示されます

ロードアベレージは、CPUコア数と照らし合わせることで負荷の大きさを相対的に読み取れます。ただし、仮想マシンやコンテナ、CPU affinity、cgroupの制限などがある環境では、nprocの値が物理CPU全体のコア数と一致するとは限りません。

uptimeでロードアベレージとサーバー全体の状態を確認する

次に、uptimeで稼働時間、ログインユーザー数、ロードアベレージを確認します。一般的な表示では、ロードアベレージが直近1分、5分、15分の順に示されます。

BASH
uptime
# 出力例: 現在時刻、稼働時間、ログインユーザー数、ロードアベレージが表示されます

1分の値だけが高ければ一時的な上昇、5分や15分も高ければ継続的な負荷である可能性を検討します。nprocで確認したプロセッサ数と比較しながら、負荷がCPUコア数に対してどの程度かを確認してください。

topでCPU使用率の高いプロセスを特定する

サーバー全体の負荷が高い場合は、topを起動してプロセス単位の状況を確認します。CPU使用率、メモリ使用率、PID、プロセスの状態などを確認し、CPU使用率の高いプロセスが継続して存在するかを見ます。

BASH
top
# 操作例: qで終了します。表示項目や並び順は環境や設定によって異なります。

瞬間的にCPU使用率が高いだけのプロセスもあるため、画面を少し観察して継続性を確認します。ロードアベレージが高い一方でCPU使用率が目立たない場合は、I/O待ちやプロセスの待ち状態など、別の要因も調査候補にします。

psで対象プロセスを詳しく確認し、必要ならkillを検討する

topで見つけたPIDについて、psで実行ユーザー、親プロセス、状態、実行コマンドなどを確認します。次の例では、指定したPIDを対象に情報を表示します。

BASH
PID=1234
ps -p "$PID" -o pid,ppid,user,stat,etime,cmd
# 出力例: 指定したPIDの親PID、ユーザー、状態、経過時間、コマンドなどが表示されます

確認時は、そのプロセスが何の処理を担っているか、同じコマンドのプロセスが複数存在しないか、サービス管理下にあるかを調べます。psは実行時点のスナップショットであるため、topで見た状況と変化していないかも確認します。

プロセスを終了する必要がある場合でも、PID、業務影響、必要な権限、サービスの再起動設定を先に確認してください。killは指定したプロセスへシグナルを送るコマンドで、通常の終了要求にはTERMが使われます。強制終了に相当するKILLは後処理の機会を与えないため、安易に使わないようにします。

BASH
PID=1234
# 実行前にPID、対象サービス、業務影響を確認してください。
kill -TERM "$PID"
# 期待される挙動: 対象プロセスへTERMシグナルを送ります。実行結果や終了可否はプロセスの状態と権限に依存します。

参考