ps・topコマンドでプロセスを確認する方法|PID・CPU・メモリ使用率を解説

  • URLをコピーしました!

これまでのLinux中級では、 ユーザ・グループ・ファイルの所有者や権限 について学習してきました。

ここからは、 Linuxサーバ上で実際に動作している プログラムや処理 に目を向けていきます。

Linuxでは、実行中のプログラムや処理を プロセス(process) として管理しています。

今サーバ上で何が動いている?
CPUを大量に使っている処理はどれ?
Webサーバのプロセスは起動している?

こうした確認に利用する代表的なコマンドが、 psとtopです。

🐧 LINUX INTERMEDIATE

この記事はLinux中級講座の一部です。 Linuxサーバ上で動作しているプロセスを確認し、 障害調査や負荷確認の基本を学習します。

Linux中級講座を見る →
LESSON GOAL この記事のゴール

Linuxのプロセス・PIDの意味を理解し、 ps・ps aux・top を使って実行中の処理やCPU・メモリ使用率を確認できる状態を目指します。

目次

Linuxのプロセスとは?

プロセスとは、 現在実行されているプログラムや処理 のことです。

たとえばLinuxサーバでは、 次のような処理が同時に動いています。

SSH sshd

SSH接続を受け付ける

WEB httpd / nginx

Webページを配信する

SYSTEM systemd

システムやサービスを管理する

COMMAND bash

ユーザのシェルを動かす

これらはすべて、 Linux上ではプロセスとして管理されています。

PROGRAM プログラムそのもの ↓ 実行 PROCESS 実際に動いている処理

プロセスにはPIDが割り当てられる

Linuxでは、 それぞれのプロセスに PID(Process ID) という番号が割り当てられます。

PROCESS nginx
→
PID 1250

つまりLinuxは、 プロセス名だけではなく PIDによって個々のプロセスを識別 しています。

PIDはプロセスの識別番号

次の記事で学習する killコマンドでは、 このPIDを指定してプロセスを終了させることがあります。

psコマンド:現在のプロセスを確認する

実行中のプロセスを確認する代表的なコマンドが、 psです。

ps
Linux Terminal
$ ps
    PID TTY          TIME CMD
   2301 pts/0    00:00:00 bash
   2410 pts/0    00:00:00 ps

引数なしのpsでは、 現在の端末に関連するプロセス などが表示されます。

表示内容を見てみましょう。

PID 2301 プロセスID
TTY pts/0 関連する端末
TIME 00:00:00 CPU時間
CMD bash コマンド名

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 171452 13200 ?        Ss   09:00   0:02 /usr/lib/systemd/systemd
root       850  0.0  0.1  82340  7500 ?        Ss   09:01   0:00 /usr/sbin/sshd
nginx     1250  0.2  1.5 160240 62000 ?        S    09:05   0:14 nginx: worker process
mysql     1400  3.8  8.2 950000 330000 ?       Ssl  09:05   4:31 mysqld
user      2301  0.0  0.1  18000  6200 pts/0    Ss   10:20   0:00 bash

これなら、 システム全体でどのようなプロセスが動いているのかを確認できます。

ps auxの表示項目を理解しよう

ps auxでは多くの情報が表示されますが、 中級ではまず次の項目を確認できれば十分です。

項目 意味
USER プロセスを実行しているユーザ
PID プロセスID
%CPU CPU使用率
%MEM メモリ使用率
STAT プロセスの状態
COMMAND 実行しているコマンドやプログラム

USERを見ると「誰の権限で動いているか」が分かる

前の記事までに学習した Linuxユーザ管理が、 ここでもつながります。

USER       PID COMMAND
root         1 /usr/lib/systemd/systemd
nginx     1250 nginx: worker process
mysql     1400 mysqld

この例では、

systemd root
nginx nginx
mysqld mysql

というユーザ権限で各プロセスが動作しています。

プロセスにも「誰が動かしているか」がある

サービス専用ユーザでプロセスを動かすことで、 必要以上の権限を与えないようにすることができます。

%CPUと%MEMで負荷を確認する

サーバの動作が重いときには、 %CPUと%MEMが重要です。

%CPU CPU使用率

どのプロセスがCPUを多く使用しているか確認する。

%MEM メモリ使用率

どのプロセスがメモリを多く使用しているか確認する。

たとえば、

USER       PID %CPU %MEM COMMAND
nginx     1250  0.2  1.5 nginx
mysql     1400 78.4 42.0 mysqld
sshd       850  0.0  0.1 sshd

となっていれば、 mysqldのCPU・メモリ使用率が非常に高い ことが分かります。

ps auxとgrepを組み合わせて特定プロセスを探す

サーバ全体のプロセスを表示すると、 非常に多くの行が表示されることがあります。

そのため、 初級で学習した grepを組み合わせる方法もよく利用します。

ps aux | grep nginx
$ ps aux | grep nginx
root      1200  0.0  0.1 159100  5100 ?        Ss   09:05   0:00 nginx: master process
nginx     1250  0.2  1.5 160240 62000 ?        S    09:05   0:14 nginx: worker process
user      2501  0.0  0.0  12100  2100 pts/0    S+   10:35   0:00 grep --color=auto nginx

これでnginxに関係する行だけ絞り込めます。

BEGINNER POINT grep自身も検索結果に表示されることがある

ps aux | grep nginxを実行すると、 「grep nginx」というプロセス自体も検索条件に一致するため 表示される場合があります。

「|」はコマンドの出力を次のコマンドへ渡す

ここで初めて | が登場しました。

これは パイプ(pipe) と呼ばれます。

ps aux 全プロセスを表示
→ | →
grep nginx nginxだけ検索

つまり、

ps auxの結果 ↓ grepへ渡す ↓ nginxだけ表示

という流れです。

Linuxではコマンドを組み合わせて使うことが多い

ps aux | grep nginxのように、 1つのコマンドの出力を別のコマンドへ渡すことで 必要な情報を絞り込めます。

topコマンド:プロセスをリアルタイムに確認する

psは実行した時点の情報を表示します。

一方、 topは プロセスの状態をリアルタイムに更新しながら表示します。

top
top - 10:42:01 up 1 day,  2:10,  1 user,  load average: 0.82, 0.61, 0.44
Tasks: 132 total,   1 running, 131 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.4 us,  3.1 sy, 84.1 id
MiB Mem :   4096.0 total,    620.0 free,   2250.0 used,   1226.0 buff/cache

    PID USER      PR  NI    VIRT    RES   %CPU %MEM COMMAND
   1400 mysql     20   0  950000 330000   38.4  8.2 mysqld
   1250 nginx     20   0  160240  62000    4.2  1.5 nginx
   2301 user      20   0   18000   6200    0.0  0.1 bash

topを使うと、 CPU使用率やメモリ使用率が変化していく様子を確認できます。

top画面の上部ではサーバ全体の状態を確認できる

topの画面は、 大きく サーバ全体の情報と プロセス一覧に分かれます。

LOAD load average

システム負荷の目安

TASKS Tasks

プロセス数・状態

CPU %Cpu(s)

CPU全体の利用状況

MEMORY MiB Mem

メモリ全体の利用状況

topの下部では負荷の高いプロセスを確認できる

top画面下部では、 各プロセスのCPU・メモリ使用率を確認できます。

PID   USER   %CPU  %MEM  COMMAND
1400  mysql  38.4   8.2  mysqld
1250  nginx   4.2   1.5  nginx
2301  user    0.0   0.1  bash

この例なら、 mysqldが最もCPUを利用している ことが分かります。

topで覚えておきたい基本操作

q 終了 topを終了する
P CPU順 CPU使用率で並べる
M メモリ順 メモリ使用率で並べる
topから戻れないときは q

lessと同じように、 topも通常のプロンプト画面とは別の表示になります。 終了するときはqを押します。

psとtopはどう使い分ける?

PS その瞬間の状態

実行したタイミングの プロセス一覧を確認する。

ps aux
TOP リアルタイム監視

CPU・メモリ使用率などを 更新しながら確認する。

top
プロセスを探す ps / 負荷をリアルタイム確認 top

プロセスには状態がある

psやtopには、 STATや状態に関する情報も表示されます。

代表的な状態を簡単に覚えておきましょう。

状態 意味
R Running:実行中または実行可能
S Sleeping:待機中
T Stopped:停止中
Z Zombie:終了したが情報が残っている状態
S(Sleeping)は異常ではない

多くのサービスは、 常にCPUを使って処理しているわけではなく、 通信やイベントを待っている間はSleeping状態になります。

プロセスには親子関係もある

Linuxでは、 あるプロセスが別のプロセスを起動することがあります。

そのため、 プロセスには 親プロセスと子プロセス という関係があります。

PARENT sshd PID 850
↓
CHILD sshd: user PID 2200
↓
CHILD bash PID 2301

親プロセスのPIDは PPID(Parent Process ID) として確認できます。

ps -ef
$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root       850     1  0 09:01 ?        00:00:00 /usr/sbin/sshd
user      2200   850  0 10:20 ?        00:00:00 sshd: user
user      2301  2200  0 10:20 pts/0    00:00:00 -bash

実務ではどのようにプロセスを確認する?

たとえば、 「Webサイトが重い」という問い合わせがあったとします。

その場合、Linuxサーバでは次のように確認できます。

01 top

CPU・メモリ使用率を確認

↓
02 負荷の高いPIDを確認

どのプロセスが原因か特定

↓
03 ps aux

ユーザやCommandを詳しく確認

たとえばtopで、

PID   USER   %CPU  %MEM  COMMAND
1400  mysql  95.8  42.0  mysqld

と表示されていれば、 mysqldが高負荷になっている可能性があります。

IMPORTANT 負荷が高いからすぐ終了する、とは限らない

CPU使用率が高いプロセスでも、 正常な処理によって一時的に負荷が高くなっている場合があります。 プロセスを停止する前に、原因や影響を確認することが重要です。

ここで実際に試してみよう:Linuxプロセス確認シミュレーター

疑似Linux環境で、 ps・ps aux・ps aux | grep nginxを実行してみましょう。

INTERACTIVE LAB

Linux Process Monitor

PROCESS
PROCESS mysqld PID 1400
CPU 78.4% HIGH
MEMORY 42.0% HIGH
● ● ● user@linux
Linux process monitoring practice
ps / ps aux / top を試してみましょう。
user@linux:~$
START

まずps auxでプロセス一覧を確認しましょう

USER・PID・%CPU・%MEM・COMMANDに注目してみましょう。

理解度チェック:高負荷プロセスを見つけよう

次のプロセス一覧を確認してください。

PID   USER    %CPU   %MEM   COMMAND
850   root     0.0    0.1   sshd
1250  nginx    3.2    1.5   nginx
1400  mysql   92.4   41.8   mysqld
2301  user     0.1    0.2   bash

CPU使用率が最も高いプロセスのPIDはどれでしょうか?

回答を選択してください

%CPU列を確認してみましょう。

問題のあるプロセスを見つけたらどうする?

ここまでで、 psやtopを使って どのプロセスが動いているか を確認できるようになりました。

では、 次のような状態になった場合はどうでしょうか。

PROCESS mysqld
PID 1400
CPU 99.8%

プロセスが異常状態となり、 正常な方法では停止できない。

このような場合、 Linuxではプロセスへ シグナルを送って 終了を要求することがあります。

そこで利用する代表的なコマンドが killです。

kill PID

次の記事では、 PIDを指定してプロセスを終了する方法や、 SIGTERM・SIGKILLの違い について学習します。

確認問題:Linuxプロセス管理の基本を確認しよう

QUESTION 01

Linuxで各プロセスを識別する番号はどれですか?

正解:B

PIDはProcess IDの略で、 Linuxが個々のプロセスを識別するために利用します。

QUESTION 02

サーバ全体のプロセスを一覧で確認するときによく使うコマンドはどれですか?

正解:A

ps auxを使うと、 多くのプロセスについてUSER・PID・CPU・MEMORYなどを確認できます。

QUESTION 03

CPU・メモリ使用率をリアルタイムに確認したい場合に適しているコマンドはどれですか?

正解:C

topはプロセスやCPU・メモリ使用率などを リアルタイムに更新しながら確認できます。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

01

Linuxでは実行中のプログラムを プロセスとして管理する

02

各プロセスには PID(Process ID)が割り当てられる

03

ps auxで USER・PID・CPU・メモリ使用率などを確認できる

04

topを使うと CPU・メモリ・プロセスの状態をリアルタイムに確認できる

05

高負荷プロセスを見つけても、 原因や影響を確認してから対応する ことが重要

NEXT LESSON

次は「killコマンドでプロセスを終了する」を学びましょう

ps・topを使ってプロセスを確認できるようになったら、 次は問題のあるプロセスへ終了を要求する方法を学習します。

次の記事では、 kill・PID・シグナル・SIGTERM・SIGKILL の関係を理解し、 安全にプロセスを終了する考え方を学びます。

killコマンドでプロセスを終了する →
LINUX INTERMEDIATE

Linux中級講座の一覧へ戻る

Linux中級の学習順を確認したい場合は、 講座一覧へ戻りましょう。

← Linux中級講座へ戻る
目次