Apacheのアクティブ接続数を取得する

Windows だと perfmon 使えば一発なんだけど、Linux だとどうやるんだっけ?
って事で調べてみました。

前に、Apache が怪しい動きをしていた時に使った lsof コマンドでも似たようなことが出来るかなぁっと思ったんだけど、これだと単純にプロセス数になってしまいます。

Apache が起動しない - Address already in use: make_sock: could not bind to address
Address already in use: make_sock: could not bind to address :80という感じのエラーが出てApacheが起動できない場合の対処。

当然、Current Connections とは違う。

ってことで、やはり一番簡単なのは普通に netstat の結果に grep かけて行数をカウントする方法。

netstat -an |grep :80 |wc -l
http://blog.mattsatorius.com/technology/web-design/ssh-command-to-show-current-active-apache-connections/

まぁ、これでも良いんだけど、これだと全てのIPアドレスを一緒にしてカウントされてしまうので、もっといい方法が無いか調べてみました。

IP別に集計する

って事で、色々見てたらかなり強引だけど、IP別に表示する方法がありました。

netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
http://www.webhostingtalk.com/showthread.php?t=673467

素晴らしい!

thats what i was looking for..

確かに。

でも、これ IPv4 なら問題ないんだけど、IPv6だと
cut -d: -f 1
の部分で IPv6 の IP を全部そぎ落としてしまうので、ちょっと改造しました。

IPv6 も考慮してみた

netstat -plan|grep :80|awk {'print $5'}|sed -e 's/\:[^.]*$//'|sort|uniq -c|sort -nk 1

これで IP別にカウントされます。

欲を言うとホストヘッダー毎にカウントできると一番いいんだけど、まぁ、今回はこれくらいで。

watch で自動更新する

で、こういうのって状況的に、ロードバランサーからサーバーを外したりとか、入れたりとかした時の変化を監視するのに使ったりするので、出来れば数秒間隔で更新されるといいなぁっと思ってたんですが、watch を使えば出来ますね。

watch -d -n 1 "netstat -an |grep :80 |wc -l"

とか

watch -d -n 1 "netstat -plan|grep :80|awk {'print $5'}|sed -e 's/\:[^.]*$//'|sort|uniq -c|sort -nk 1"

みたいな感じ。

今回はじめて watch の d オプション使ってみたけど、これはいいですね。

なんか少し、監視している気分になりました(笑)

HTTPS もカウントするように

2012-09-28追記

前回のスクリプトだと HTTP のコネクションしかカウント出来なかったので、HTTPS もカウントするように修正しました。

watch -d -n 1 "netstat -plan|egrep ':(80|443) '|awk {'print $5'}|sed -e 's/\:[^.]*$//'|sort|uniq -c|sort -nk 1"

これで、WEB に対してのコネクションがどの程度有るか一発で分かります!

このページはINOLOGから移植されました

コメント

タイトルとURLをコピーしました