Plack::Middleware::ServerStatus::Lite 0.07 でステータス画面に起動してから処理したアクセス数がだせるようになりました。監視ツールと組み合わせてリアルタイムに処理しているアクセス数を確認できます。

Middlewareを読み込む際に counter_file に記録用のファイルを指定すると利用できます。デフォルトは無効です

use Plack::Builder;
use File::Temp qw/tempdir/;

builder {
    enable "Plack::Middleware::ServerStatus::Lite",
        path => '/server-status',
        allow => [ '127.0.0.1', '192.168.0.0/16' ],
        counter_file => '/tmp/counter_file',
        scoreboard => tempdir(CLEANUP=>1);
    sub { [200,['Content-Type'=>'text/plain'],['OK']] }
};

counter_file に File::Temp::tempfile を使う場合は、EXLOCKの解除が必要となります。

my ($fh,$filename) = File::Temp::tempfile( EXLOCK => 0 );
#または
my ($fh,$filename) = File::Temp::tempfile();
undef $fh;

testしていて見事にハマりました。

ステータス画面は次のようになります。Total Accessesの行が増えてますね。

% curl http://localhost:5000/server-status
Uptime: 1338530908 (9 seconds)
Total Accesses: 4321
BusyWorkers: 1
IdleWorkers: 4
--
pid status remote_addr host method uri protocol ss
86963 _ 127.0.0.1 localhost:5000 GET / HTTP/1.0 3
86964 _ 127.0.0.1 localhost:5000 GET / HTTP/1.0 3
86965 _ 127.0.0.1 localhost:5000 GET / HTTP/1.0 3
86966 _ 127.0.0.1 localhost:5000 GET / HTTP/1.0 3
86967 A 127.0.0.1 localhost:5000 GET /server-status HTTP/1.1 0

ちなみに /server-status へのアクセスもカウントされます。

ステータス画面の「ss」も今回のバージョンで追加されたもので、最後のリクエストを受け付けてからの経過時間です。Aapacheのmod_statusにもあります。


カウンターを入れた事で気になるオーバーヘッドですが、それほど大きくはなさそうです。手元のMacbook Airで上のpsgiを実行し、ApacheBenchをかけたところ、

# サーバ起動
% plackup -E production -s Starman app.psgi 
# ApachBench
% ab -c 3 -n 4320  http://localhost:5000/

カウンターなしで 1700req/sec。カウンター有りで 1650req/sec。実際のアプリケーションにしたらほぼ誤差になるんじゃないでしょうか。


ServerStatus::Lite へのカウンター機能の追加はsmlyさんからの提案でした。ありがとうございます。Cache::FastMmapやIPC::ShareLiteなどいくつか実装を試しつつ最終的に普通のファイルベースとなりました。

このブログ記事について

このページは、Masahiro Naganoが2012年6月 1日 15:49に書いたブログ記事です。

ひとつ前のブログ記事は「MySQL Beginners Talk で LT してきました」です。

次のブログ記事は「GrowthForecast のデータストアに MySQL が使えるようになりました」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja