プロセスはどれも、システムのCPU時間やメモリ空間やディスク空間などのシステムリソースを使用している。しかしプロセスに問題が起こると、CPU時間やメモリ空間の過剰な消費が始まってしまい、その結果、他のプロセスが実行に必要なリソースを得ることができなくなってしまうことがある。
そのような暴走プロセスを管理するための方法を知っておくことは、Linuxのシステム管理では不可欠な知識だ。Linux上でプロセスを管理するためには、ps、top、service、kill、killallのようなコマンドラインツールを利用することができる。
ps
psは、マシン上で現在実行中のプロセスを表示する。psには数多くのオプションがあるが、中でももっとも便利な起動方法の一つとして、「ps aux」がある。「ps aux」と実行すると、システム上のすべてのプロセスが表示される。
ブート後の通常のLinuxサーバにはおそらく100個程度のプロセスがあるため、psコマンドの出力はかなり長いものになる。以下に、CentOS 5搭載のテスト用マシンで実行したpsの出力結果の最初の部分を示す。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 10308 668 ? S 15:03 0:00 init [5] root 2 0.0 0.0 0 0 ? S 15:03 0:00 [migration/0] root 3 0.0 0.0 0 0 ? SN 15:03 0:00 [ksoftirqd/0] root 4 0.0 0.0 0 0 ? S 15:03 0:00 [watchdog/0] root 5 0.0 0.0 0 0 ? S
各項目について以下に簡単に説明する。
- USER:プロセスを所有しているユーザのユーザ名。
- PID(プロセスID):各プロセスに与えられている一意のプロセス番号。
- %CPU:各プロセスのCPUの使用率。CPUを使用した時間をプロセスの実行時間で割った結果のパーセンテージで表示される。
- %MEM:プロセスが使用している物理メモリ量。
- VSZ:プロセスの仮想メモリサイズ(単位はキロバイト)。
- RSS:VSZと似ているが仮想メモリサイズではなく、プロセスが使用しているスワップされていない物理メモリ量(単位はキロバイト)。
- TTY:制御端末。
- STAT:プロセスの状態。なお
Sはプロセスがスリープ状態にあり、かつ、すぐにでも実行可能状態になる可能性があることを示し、Nはプロセスの優先度が低いことを示し、<はプロセスの優先度が高いことを示す。その他に注目すべき文字には、l(プロセスがマルチスレッド化されていることを示す)やR(プロセスが実行中であることを示す)などがある。 - START:プロセスを起動した時刻。
- TIME:累積したCPU時間。プロセスが使用した全CPU時間と、そのプロセスのためにカーネルが使用した全CPU時間の合計。
より詳しい説明についてはpsのmanページを参照して欲しい。
psの長い出力結果から特定のプロセスを探すのは困難なこともある。そのような場合には、grepコマンドを利用してマッチする文字列を見つけ出すと良い。例えばsendmailのプロセスを見つけるためには以下のようなコマンドを使用する。
ps aux | grep sendmail root 2401 0.0 0.4 66444 2064 ? Ss 15:04 0:00 sendmail: accepting connections smmsp 2409 0.0 0.3 53040 1752 ? Ss 15:04 0:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue gary 3807 0.0 0.1 60224 700 pts/2 R+ 15:17 0:00 grep sendmail
上記のように実行すると、目的の文字列(sendmail)にマッチするためにgrepコマンド自体(上記の例ではPID 3807のプロセス)も出力に含まれる。しかし当然ながらそれはsendmailサービスの一部ではない。
