Linuxでよく使う便利コマンド ps aux を改めて理解するためのメモ

Linux

普段何気なく使うことも多いLinuxのps auxコマンド。魔法のようにつかっている方も多いと思うが、改めて各オプションが実際どういう意味なのか?どういう時にps auxを使うと威力を発揮するのかについて触れておく。

psコマンドのオプションa, u, xの意味

ざっとまとめると下記:

  • a: 端末操作のプロセス(自分 + 他ユーザー)を表示する
  • u: 各プロセスの実行ユーザーやCPU, Mem(メモリ)等の情報も表示する
  • x: 端末操作のないプロセス(daemon等)も表示する

上記のうち、aとxを組み合わせると全てのプロセスをリストアップしてくれるようになる。さらにuオプションを併用することで、具体的にどのユーザーの実行プロセスで、どれくらいのCPUやメモリを食っているのか等も表示してくれるようになる。

実運用におけるps auxの活用事例

例えばバッチサーバーにおける事例を挙げる。特定のバッチ実行が何らかの理由でいつまで経っても終わらず、次のバッチ実行までCPUやメモリを食いつぶし続けてしまうようなことが実際あったりする。そうなるとWebサービスの運営に支障をきたしかねない。

 

その場合、暫定対応としてふんづまっているバッチのプロセスを特定してkillコマンドで削除し、対象のバッチ実行を強制的に終了させるという方法を取ることがある。この時にpsコマンドが役立つ。auxオプションまで付け加えれば実行ユーザーや対象プロセスが食いつぶしているCPUやメモリまで細かく判るので、killすべきプロセスIDを特定しやすくなるのがメリットだ。また、パイプでgrepを組み合わせることで、バッチ実行コマンドを絞り込むことも可能

 

これに加え、killしたいプロセスに関連性(AバッチからBバッチを実行させるような)があるような場合にはfオプションでプロセス毎の関連性をtree構造で表示してくれたりするので、そちらも活用する価値あり。

 

余談だが、DB(ここではMySQLとする)に負荷がかかってふんづまっているようなバッチをkillしても、MySQLへの負荷が減らないことがある。そういう場合はMySQLに接続し、show processlist;でふんづまっているMySQL内のクエリプロセスを特定し、killしてあげる必要があったことがあった。バッチ実行だけkillしても、MySQLへSelectやUpdate等が投げっぱなしの状態になるらしい。要注意。