「このサーバーで何が動いているのか把握したい」「見慣れないプロセスがある」——そんなときは ps aux を起点に調査を進めるのが最短ルートです。systemd 環境での確認手順も含め、現場で使える読み解き方をまとめます。
全プロセスを一覧する
まず以下のコマンドを実行します。aux オプションで、すべてのユーザーのプロセスを BSD スタイルで表示できます。
ps aux
出力が多い場合は less に渡すか、プロセス名で絞り込むと扱いやすくなります。
ps aux | less
ps aux | grep nginx
ツリー構造(親子関係)を確認したいときは --forest を付けます。
ps aux --forest
出力フィールドの読み方
ps aux の各列の意味は次のとおりです。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 169820 13200 ? Ss Jun01 0:03 /sbin/init
root 512 0.0 0.0 15432 1024 ? Ss Jun01 0:00 sshd: /usr/sbin/sshd -D
www-data 1234 0.1 0.5 123456 45678 ? S 10:00 0:12 nginx: worker process
root 8765 22.5 1.2 987654 98765 pts/0 R+ 10:30 0:04 python3 batch.py
重要なフィールドの意味をまとめます。
TTY:プロセスが紐付いている端末。? はデーモン(端末なし)を意味します。pts/0 のように表示されているプロセスはログインセッションから起動されています。
%CPU / %MEM:CPU使用率とメモリ使用率。この値が異常に高いプロセスはまず疑います。
TIME:プロセスが消費した累積 CPU 時間。長時間稼働サーバーで突出して大きい値は要注意です。
STAT(プロセス状態)値を正確に読む
STAT フィールドは複数の文字で構成されており、プロセスの今の状態を表します。最初の1文字が主状態、2文字目以降が補助情報です。
主状態の一覧:
R:実行中または実行キューに入っている状態。CPU を積極的に使っています。S:割り込み可能なスリープ。I/O待ちや sleep() 中。通常のデーモンはほぼここにいます。D:割り込み不可スリープ。ディスク I/O やNFS待ちなど。カーネルシグナルも受け付けない状態で、長時間継続する場合はストレージ障害の兆候です。T:シグナルによって停止中(Ctrl+Z でのジョブ停止など)。Z:ゾンビ。プロセスは終了しているが、親が wait() を呼んでいないため PID が残っている状態。I:アイドルカーネルスレッド(Linux 4.14 以降)。カーネル内部のスレッドで、何も処理していないことを示します。
補助フラグの一覧:
s:セッションリーダー(sshd、bash など)。+:フォアグラウンドプロセスグループに属している。l:マルチスレッドプロセス。<:高優先度(nice 値がマイナス)。N:低優先度(nice 値がプラス)。バッチ処理などに設定されます。
ある運用現場では、D 状態のプロセスが急増したことでNFSマウント先の応答停止を素早く発見できた事例があります。ps aux の出力を定期的に眺る習慣が、障害の初動を早めます。
systemd 環境ではサービス単位でも確認する
現代の Linux(RHEL 7以降、Ubuntu 16.04以降など)は systemd を採用しています。デーモンの状態確認は ps だけでなく systemctl と組み合わせるのが実務の標準です。
稼働中のサービス一覧を取得するには次のコマンドを使います。
# 起動中のサービスのみ表示
systemctl list-units --type=service --state=running
# 失敗しているサービスを確認
systemctl list-units --type=service --state=failed
特定サービスの詳細(PID・ログ・起動時刻)を確認するには status サブコマンドが便利です。
systemctl status nginx
出力には該当ユニットが管理するプロセスの PID と最新のジャーナルログが含まれており、ps の出力と突合できます。
気になるプロセスをさらに深掘りする
PID が判明したら /proc/<PID>/ ディレクトリを参照することで、プロセスが何をしているかを詳細に確認できます。
# 起動時のコマンドライン全体を確認(コマンドが省略されていた場合に有効)
cat /proc/1234/cmdline | tr '\0' ' '
# 開いているファイル・ソケットを確認
lsof -p 1234
# カレントワーキングディレクトリを確認
ls -la /proc/1234/cwd
lsof -p <PID> は、そのプロセスが開いているファイル・ネットワークソケット・デバイスをすべて列挙します。見慣れないプロセスが外部に通信していないかの確認にも使えます。
確認時の注意点と判断基準
D 状態が長時間続く場合:ストレージまたはNFSの問題を疑います。iostat -x 1 や dmesg | tail でディスクエラーを確認してください。kill シグナルを送っても終了しないため、根本原因の解消が先決です。
Z 状態が多数ある場合:親プロセスが子プロセスの終了を正常に回収できていません。親プロセスの実装バグか、親自体が応答不能になっているケースが多いです。ゾンビ自体はリソースをほぼ消費しませんが、PID の枯渇につながることがあります。
TTY が ? でないのに見覚えのないプロセスがある場合:誰かがログインセッションから手動で起動した可能性があります。who や last と組み合わせてセッションを特定してください。
なお、ps の出力はコマンド実行時点のスナップショットです。継続的な監視には top・htop・atop のようなインタラクティブツール、または Prometheus + Node Exporter のような仕組みを組み合わせるのが実務の定石です。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
