MENU

実行中のプロセスを一覧表示して負荷の原因を特定する実務手順

サーバーの応答が遅い、CPUやメモリが想定以上に消費されている——そんなとき、まずやるべきことはプロセスの状態確認です。現在何が動いているかを把握すれば、問題の原因はほぼ絞り込めます。この記事では、実務でよく使うプロセス確認の手順を目的別にまとめます。

目次

まず結論:全プロセスを一覧で確認する

システム上で動いているすべてのプロセスを確認する場合、以下のどちらかを使います。

# BSDスタイル(ほぼすべてのディストリで動作)
ps aux

# UNIXスタイル(PPID=親プロセスIDが表示される)
ps -ef

ps aux はユーザー名・CPU・メモリ使用率など横断的な情報が見やすく、現場でも最もよく使われます。ps -ef はPPID(親プロセスID)が表示されるため、プロセスの親子関係を追う場面で重宝します。出力が長い場合はページャーに流すと見やすくなります。

ps aux | less

出力列の読み方:最低限おさえておく項目

ps aux の主要な列の意味は以下のとおりです。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169632 13024 ?        Ss   Jul01   0:05 /sbin/init
www-data   412  0.3  2.1 854320 87432 ?        S    Jul01   1:23 /usr/sbin/apache2
  • %CPU%MEM:それぞれCPUとメモリの使用率。負荷調査で最初に見る値です。
  • RSS:実際に物理メモリに載っているサイズ(KB単位)。仮想メモリサイズ(VSZ)より実態に近い値です。
  • STAT:プロセスの状態を示す記号。詳細は後述します。
  • PID:プロセスID。kill コマンドで停止する際に使います。

STAT列の状態コードを読む

  • R:実行中(Running)またはCPU待ち
  • S:スリープ中(割り込み可能)。通常の待機状態
  • D:ディスクI/O待ち(割り込み不可)。D 状態が多いとストレージ負荷が疑われます
  • Z:ゾンビ。親プロセスが終了ステータスを回収していない状態
  • T:一時停止(シグナル STOP を受けた状態)

ゾンビ(Z)が増え続けている場合、親プロセスの実装に問題がある可能性があります。数が増えなければ即時対処は不要ですが、監視対象に加えておく価値があります。

特定のプロセスだけ絞り込む

全プロセスから特定のものを探す場合は、grep との組み合わせが最速です。

# nginxに関連するプロセスだけ表示
ps aux | grep nginx

# grep自身を除外したいとき(角括弧で先頭文字を囲む)
ps aux | grep '[n]ginx'

grep '[n]ginx' のように先頭文字を角括弧で囲むと、grep nginx というプロセス自体がヒットしないため出力がすっきりします。プロセス名からPIDだけを取得したい場合は pgrep が便利です。

# PIDのみ取得
pgrep nginx

# プロセス名も一緒に確認
pgrep -l nginx

CPU・メモリ消費の多いプロセスを上位から確認する

「何かが重い」とわかっているときは、消費量の多い順に並べて上位だけ確認するのが最短ルートです。

# CPU使用率の高い順に上位10件(ヘッダー行を含めてhead -11)
ps aux --sort=-%cpu | head -11

# メモリ消費の多い順に上位10件
ps aux --sort=-%mem | head -11

--sort の値の前に -(マイナス)をつけると降順になります。ヘッダー行を含めるため head -11 にしています。

ある運用現場では、明け方になるたびにサーバーの応答が遅くなるという事象が続いていました。この手順で調べたところ、特定のPythonスクリプトがCPUを95%近く消費していることが判明し、バッチの実行時間帯を分散させることで解決しています。プロセスを特定できれば、ログや設定の調査に迷わず移れます。

リアルタイムで継続監視するには

ps はスナップショット(一瞬の状態)を取るコマンドです。時間の経過とともに変化する状況を追うには、top または htop を使います。

# 標準装備のリアルタイム監視
top

# より見やすいインタラクティブ版(要インストール)
# Debian/Ubuntu系
sudo apt install htop

# RHEL/Rocky/AlmaLinux系
sudo dnf install htop

htop

top 起動中の主なキー操作:P でCPU使用率順、M でメモリ使用率順に並び替え、k で指定PIDのプロセスを終了、q で終了します。

htop はカラー表示・マウス操作対応で視認性が高く、複数CPUコアの使用状況を横並びで確認できます。本番サーバーへのインストールに制限がある環境では top で十分対応できます。

systemdサービス単位でプロセスを確認する

現代のLinux(systemd採用環境)では、サービスに紐づくプロセスをサービス単位で確認する方法も実務上欠かせません。

# nginxサービスの状態とそのプロセスを確認
systemctl status nginx

# ページャーなしで出力(ログ連携やスクリプトに便利)
systemctl status nginx --no-pager

出力にはサービスの稼働状態(active / inactive / failed)とともに、そのサービスが管理するプロセスのPIDがCGroup単位で列挙されます。

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
     Active: active (running) since Mon 2026-08-04 09:12:35 JST; 2h 10min ago
   Main PID: 1022 (nginx)
      Tasks: 5 (limit: 4664)
     CGroup: /system.slice/nginx.service
             ├─1022 nginx: master process /usr/sbin/nginx
             ├─1023 nginx: worker process
             └─1024 nginx: worker process

特定のサービスが予期しない数のワーカーを起動していないか、異常終了を繰り返していないかはこの出力で把握できます。サービスの状態確認と障害の初動調査を一度に済ませられるため、ps aux と並んで実務の定番になっています。

状況ごとのコマンド選択の目安をまとめます。全体をざっくり把握したいなら ps aux、負荷の犯人を探したいなら ps aux --sort=-%cpu | head -11 または --sort=-%mem、特定サービスのプロセスを見たいなら systemctl status サービス名、推移をリアルタイムで追いたいなら top または htop を選んでください。プロセスの状態把握は負荷調査・サービス復旧・セキュリティ確認など、あらゆる運用対応の起点になります。

<PR>この記事に関連するおすすめ書籍

新しいLinuxの教科書 第2版

コマンド操作から基本的な運用までを手を動かしながら体系的に学べる定番書。地力を固めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次