こんにちは、インフラエンジニアのryuです。
Linuxサーバーで、Webサーバーが起動しているか確認したい。 CPUやメモリを多く使っている処理を探したい。
そんなときに使うのが、psコマンドです。
よく使われるのはps auxですが、どこを見ればよいのか迷いますよね?
この記事では、ps auxとps -efの違い、表示項目の見方、特定のプロセスを探す方法まで解説します。
psコマンドとは?¶
psは、実行した時点のプロセス情報を表示するコマンドです。
プロセスとは、Linux上で実行されているプログラムの処理単位です。
Nginx、SSH、データベースもプロセスとして管理されます。
各プロセスにはPIDが割り当てられます。

オプションを付けずに実行してみましょう。
ps
通常は、現在の端末で実行しているプロセスだけが表示されます。
PID TTY TIME CMD
3120 pts/0 00:00:00 bash
3251 pts/0 00:00:00 ps
サーバー全体のプロセスを確認したい場合は、ps auxやps -efを使います。
ps auxでプロセスを一覧表示する¶
Linuxのプロセスを広く確認するときは、次のコマンドがよく使われます。
ps aux
a、u、xは、ハイフンを付けないBSD形式のオプションです。
| オプション | 内容 |
|---|---|
a |
ほかのユーザーのプロセスも表示する |
u |
ユーザー名やCPU・メモリ情報を表示する |
x |
端末に接続されていないプロセスも表示する |
組み合わせると、バックグラウンドのサービスも確認できます。
ps -auxと書かれた手順を見かけることもありますが、通常はハイフンを付けずにps auxと入力します。
ps auxの表示項目を見る¶
ps auxを実行すると、次のような情報が表示されます。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 169588 13200 ? Ss 09:00 0:02 /sbin/init
www-data 1250 1.2 3.4 820000 72000 ? S 10:10 0:18 nginx
主な項目は以下の通りです。
| 項目 | 意味 |
|---|---|
USER |
プロセスを実行しているユーザー |
PID |
プロセスの識別番号 |
%CPU |
CPU使用率 |
%MEM |
物理メモリに対する使用割合 |
VSZ |
仮想メモリ空間のサイズ |
RSS |
使用している物理メモリの目安 |
TTY |
接続している端末 |
STAT |
プロセスの状態 |
START |
プロセスを開始した時刻 |
TIME |
使用したCPU時間の合計 |
COMMAND |
実行コマンドと引数 |
障害調査では、PID、%CPU、%MEM、STAT、COMMANDを見ます。変化を継続して見たい場合はtopを使います。
VSZとRSSの違い¶
VSZとRSSは、どちらもメモリに関係する項目です。
VSZはプロセスが利用できる仮想アドレス空間を含むため、数字が大きくても同じ量の物理メモリを使っているとは限りません。
RSSは、プロセスが物理メモリ上で使用している量の目安です。
メモリを使っているプロセスを探す場合は、まず%MEMやRSSを確認します。
サーバー全体はfree -hも確認してください。
【関連記事】Linuxのメモリ使用率を確認する方法
STATでプロセスの状態を確認する¶
STATには、プロセスの現在の状態が記号で表示されます。
主な状態は以下の通りです。
| 記号 | 状態 |
|---|---|
R |
実行中、または実行可能な状態 |
S |
割り込み可能な待機状態 |
D |
割り込みできない待機状態 |
T |
停止中 |
Z |
ゾンビ状態 |
Dが長く続く場合は、ディスクやネットワークストレージなどの入出力待ちを確認します。
Zは、終了した子プロセスの情報を親プロセスが回収できていない状態です。
ゾンビプロセス自身へkillを実行しても解消できないため、親プロセスの状態やアプリケーションの処理を確認します。
ps auxとps -efの違い¶
プロセス一覧を表示する方法として、ps -efもよく使われます。
ps -ef
ps auxとps -efは、どちらも広い範囲のプロセスを表示します。
主な違いは、オプション形式と初期表示される項目です。
| 比較 | ps aux |
ps -ef |
|---|---|---|
| 形式 | BSD形式 | UNIX形式 |
| CPU・メモリ使用率 | 表示される | 通常は表示されない |
| PPID | 通常は表示されない | 表示される |
| 向いている確認 | 負荷や使用量 | 親子関係や起動コマンド |
ps -efの例は以下です。
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:00 ? 00:00:02 /sbin/init
root 720 1 0 09:01 ? 00:00:00 /usr/sbin/sshd -D
PPIDは、親プロセスのPIDです。
ps auxは負荷、ps -efは親子関係の確認に向いています。
特定のプロセスを確認する¶
プロセス一覧は長いため、実務では目的のプロセスだけに絞ります。
Nginxを探す場合は、次のように実行します。
ps aux | grep nginx
ただし、検索に使ったgrep nginx自身も表示されることがあります。
次のように書くと、grep自身の行を避けられます。
ps aux | grep '[n]ginx'
プロセス名で探す場合は、pgrepも使えます。
pgrep -a nginx
-aを付けると、PIDとコマンドラインが表示されます。
特定ユーザーが実行しているプロセスを探す場合は、以下の通りです。
ps -u www-data
PIDが分かっている場合は、対象だけを表示できます。
ps -p 1250 -f
表示する項目を指定する¶
-oを使うと、必要な項目だけを選んで表示できます。
ps -eo pid,ppid,user,stat,%cpu,%mem,etime,comm
この例では、PID、PPID、ユーザー、状態、CPU・メモリ使用率、経過時間、コマンド名を表示します。
| 指定項目 | 内容 |
|---|---|
pid |
PID |
ppid |
親プロセスのPID |
user |
実行ユーザー |
stat |
状態 |
%cpu |
CPU使用率 |
%mem |
メモリ使用率 |
etime |
起動後の経過時間 |
comm |
実行ファイル名 |
CPU・メモリ使用量で並べ替える¶
CPU使用率が高い順に表示する場合は、以下のように実行します。
ps aux --sort=-%cpu | head
メモリ使用率が高い順は、次の通りです。
ps aux --sort=-%mem | head
RSSが大きい順に並べることもできます。
ps -eo pid,user,%mem,rss,comm --sort=-rss | head
先頭の行だけで原因と判断しないでください。
バックアップや集計処理などで、一時的にCPUやメモリを使用している可能性もあります。
発生時刻、処理内容、ログ、数値の変化を合わせて確認します。
プロセスの親子関係を確認する¶
プロセスの親子関係を見たい場合は、ツリー形式が便利です。
ps -ef --forest
BSD形式では、次のように表示できます。
ps auxf
pstreeが入っている環境では、より見やすく確認できます。
pstree -p
親プロセスから子プロセスが枝分かれして表示され、Webサーバーの親子関係などを確認できます。
psとtopの違い¶
psとtopは、どちらもプロセスを確認するコマンドです。
違いは、情報の更新方法です。
| コマンド | 特徴 |
|---|---|
ps |
実行時点の一覧を表示する |
top |
数秒ごとに更新して変化を表示する |
psは記録、変化を見たい場合はtopが便利です。
top
障害調査では、topで変化を見ながら、必要なプロセスをpsで詳しく表示することがあります。
プロセスを終了するときの注意点¶
対象のPIDが分かったら、killコマンドでシグナルを送れます。
kill 1250
シグナルを省略した場合は、通常SIGTERMが送られます。
SIGTERMは、プロセスに終了処理を行う機会を与える終了要求です。
すぐにkill -9を使うのはおすすめしません。
kill -9 1250
SIGKILLではプロセスが終了処理を行えず、書き込み途中のデータや一時ファイルが残る可能性があります。
まずサービスの管理方法を確認し、systemdのサービスなら次のように停止します。
sudo systemctl stop nginx
通常の方法で終了できない場合に強制終了を検討します。
【関連記事】Linuxのkillコマンドの使い方
psコマンドを使った障害調査の例¶
例えば、Webサーバーの応答が遅い場合を考えてみましょう。
最初に、CPU使用率の高いプロセスを確認します。
ps aux --sort=-%cpu | head
次に、対象プロセスのPID、経過時間、起動コマンドを表示します。
ps -p 1250 -o pid,ppid,user,stat,%cpu,%mem,etime,args
必要に応じて、サービス状態やログも確認します。
systemctl status nginx
sudo journalctl -u nginx --since "30 minutes ago"
psだけで断定せず、ログや監視データと組み合わせます。
私はエンジニアとして10年以上サーバーを見てきましたが、負荷の高いプロセスをすぐ終了することはありません。
何の処理なのか、いつから増えたのか、終了した場合にどのサービスへ影響するのかを確認してから判断します。
psコマンドの使い方まとめ¶
サーバー全体のプロセスを確認する場合は、次のコマンドを使います。
ps aux
親子関係を確認したい場合は、ps -efや--forestが便利です。
ps -ef --forest
CPUやメモリの使用量で並べ替える場合は、以下のように実行します。
ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head
psは、実行時点のプロセスを確認するコマンドです。
PID、状態、使用量、起動コマンドを確認し、ログやサービス状態と合わせて判断しましょう。
Linuxのプロセス管理を学びたい方へ¶
InfraAcademyでは、ブラウザ上のLinux環境でプロセスを起動し、psやkillを実行しながら学習できます。
Linuxの基本操作から始めたい方は、Linux入門講座を確認してみてください。
プロセス、サービス、ログ管理まで学びたい方は、Linux中級講座がおすすめです。