Apache httpdの現在のプロセス数、TCP 接続本数を調べる

ab(Apache Bench) コマンドなどを実行する場合など、HTTP サーバのパフォーマンスの分析を簡易的にしたい場合に、
topなどで監視するのもいいのですが、Apacheが現在何プロセス、何本のコネクションか定期的に監視できると便利です。

今回は毎秒Apacheのプロセス数とHTTP/HTTPS接続本数を調べて結果を出力し続けるというコードを書いてみました。

Linux(CentOS), sh(bash, zsh),Apacheで動作確認しています。

apache_monitor.sh:

#!/bin/sh
export _APACHE_BIN=httpd
while true; do
    echo -n $(date +'%Y-%m-%d %H:%M:%S');
    _proc=$(ps ax | grep ht[t]pd | wc -l);
    _con=$((netstat -an 2>/dev/null)| sed -e '/ESTABLISHED/p' -ed | sed -e '/:80/p' -e '/:443/p' -ed|wc -l);
    echo " procs:$_proc conns:$_con";
    sleep 1;
done

実行結果はこのようになります。

##procs がプロセス数, conns がHTTP/HTTPS接続本数
$ apache_monitor.sh
2006-03-13 04:41:00 procs:223 conns:2
2006-03-13 04:41:01  procs:226 conns:40
2006-03-13 04:41:02 procs:253 conns:103
2006-03-13 04:41:03 procs:397 conns:128
2006-03-13 04:41:04 procs:398 conns:138
2006-03-13 04:41:05 procs:398 conns:207

実行している間、5秒おきに結果を出し続けます。
終了したい場合は、Ctrl-C を押せば終了します。