[Linux] ps auxコマンドを理解し、障害調査に活用する

2020/02/02

author

masyus

普段何気なく使うことも多いLinuxのps auxコマンド。魔法のように使われている方も多いかと思います。今回は改めて

  • a,u,x各オプションの意味
  • どんな時にps auxを使うと威力を発揮するか

をおさらいしていきます。

a,u,x各オプションの意味

具体的には下記です:

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

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

どんな時にps auxを使うと効果的か

主要な使われ方としては下記があります:

  • 現在Apacheのプロセスがいくつ展開されているのか?
  • バッチサーバーのプロセスがどれくらいCPUやメモリを食い潰しているか?

以下で詳細を見ていきます。

現在Apacheのプロセスがいくつ展開されているのか?

ps aux | grep httpd | wc -l

のように、絞り込みを行うgrepと行数をカウントするwcの組み合わせでよく使います。

ApacheはWebサービスで障害が発生するポイントの1つです。ロードバランサーから流れてきたリクエスト数を捌ききれなくてloadが上昇し、レスポンスを返せなくなってしまうケースがあります。

この時、Apacheが展開する子プロセス数が自身の展開可能な子プロセス数上限(maxClients)に達していることがよくあるため、その調査としてこのコマンドを使います。

バッチサーバーのプロセスがどれくらいCPUやメモリを食い潰しているか?

ps aux | grep {文字列}

{文字列}はバッチ実行した時に使ったコマンド(大体はバッチ名等)を指定してプロセスを絞り込みます。

バッチサーバーによくある話ですが、特定のバッチ実行が何らかの理由でいつまで経っても終わらず、バッチサーバーのCPUやメモリを食い潰してしまうようなことがあります。

そうなると、他のバッチ実行も連鎖的に失敗するようになり、Webサービスの運営に支障をきたしかねません。根本的にはそのようなバッチを作らないのがベストですが、万が一そのようなバッチがある場合はバッチサーバーにsshし、上記のコマンドで調査します。

もし調査した結果該当するバッチ実行プロセスが見つかった場合、暫定対応として当該バッチ実行プロセスをkillコマンドで削除し、対象のバッチ実行を強制的に終了させるという方法を取ることもあります。

kill -9 {プロセスID}

この時に{プロセスID}が必要となりますが、psコマンドはプロセスの一覧を出す際にそれぞれのプロセスIDを一番左に表示してくれますので、そちらを使います。