サーバーの応答が遅い、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 を選んでください。プロセスの状態把握は負荷調査・サービス復旧・セキュリティ確認など、あらゆる運用対応の起点になります。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
