導入
「サーバーで今、何が動いている?」——それを見せてくれるのが ps(process status)です。前のレッスンで学んだプロセスの一覧を、実際に表示します。Web サーバーやデータベースがちゃんと起動しているか、暴走しているプロセスはないか。運用の調査は、たいていここから始まります。
説明
引数なしの ps は、今の端末で動いているプロセスだけ を簡潔に出します(自分のシェルと ps 自身くらい)。
ps
サーバー全体を見たいときは ps aux(BSD 形式)が定番です。ユーザー・CPU・メモリ・状態まで、すべてのプロセス を詳しく並べます。
ps aux
ps -ef は親子関係(PPID)が見える UNIX 形式の表示です。前のレッスンで見たツリー構造が、PPID(親のPID)の列で読み取れます。
flowchart TD
init["/sbin/init<br/>PID 1"] --> sshd["sshd<br/>PID 420"]
init --> pg["postgres<br/>PID 512"]
init --> nginx["nginx worker<br/>PID 640"]
sshd --> bash["-bash<br/>PID 1024"]
bash --> ps["ps<br/>PID 1180"]
一覧は長くなりがちなので、実務では grep と組み合わせて 目的のプロセスだけ を探すのが定番です。「nginx は動いてる?」を確かめる、いちばんよく使う形です。
ps aux | grep nginx
ps auxを眺めると、userが起動したpython3 train.pyが CPU をほぼ100% 食っている(暴走している)のが見つかります。左のPID列の番号を控えておきましょう——次のレッスンで、これを止めます。「暴走プロセスを見つける→番号を控える→対処する」が調査の基本の流れです。
やってみよう
ps で今の端末のプロセスだけが出ることを見て、ps aux に変えると postgres や nginx などサーバー全体のプロセスまで一気に並ぶことを確かめましょう。ps -ef では PPID の列が増え、親子関係が読めます。最後に ps aux | grep nginx で、目的のプロセスだけを絞り込む定番を試してください。
演習
サーバーで動いている全プロセスを、ユーザーやCPU・メモリ付きの詳しい形(BSD 形式)で一覧してください。
ヒント1を見る
全プロセスを詳しく出すのは aux です(ハイフンなし)。
ヒント2を見る
ps aux