MonocerosやPlack/PSGIサーバの話で、YAPC::Asia 2013のトークに応募したので興味があればLikeボタンをぽちっとお願いします

http://yapcasia.org/2013/talk/show/1ae09aba-c8d5-11e2-a1f8-59856aeab6a4

その Monoceros ですが、少しずつアップデートしていて、0.13と0.14で 最大保持コネクション数を制限するオプションとMonocerosのステータスを表示するミドルウェアが付きました。

https://metacpan.org/release/Monoceros

まず、最大保持コネクション数ですが、—max-keepalive-connectionというオプションで指定します。デフォルトはオープンできるファイル数(POSIX::SCOPEN_MAX)の半分になってます。Monocerosのコネクション管理プロセスが保持する接続がこの数値以上になると、新規の接続からKeepAliveが無効となり、既存の接続も積極的にKeepAlive接続を切って行くようになります。そしてしばらくすると戻ります。

この機能をつけたのは、オープンできるファイル数の上限に達してしまうと、リクエストを処理するworkerから管理プロセスに対してソケットを渡す事ができなくなってしまい、動作が安定しなくなってしまうからです。安全をとって上限の半分をデフォルトとしています。もっとKeepAliveしたいんだ!という場合はulimitもご確認くださいませ。

指定の仕方は起動時に

$ carton exec -- plackup -E production --max-keepalive-connection=10000 \
    --port=5000 --max-workers=10 -s Monoceros --max-reqs-per-child=500 -a app.psgi

という感じです。daemontoolsを使っている場合は softlimit コマンドを使うといいですね

もうひとつのステータスを表示するミドルウェアですが、現在の接続数をみたり、—max-keepalive-connectionに達していないかを確認するのに便利です。Plack::Middleware::MonocerosStatusがMonocerosのパッケージに含まれているので、こんな風に使えます。

use Plack::Builder;

builder {
    enable "MonocerosStatus",
        path => '/monoceros-status',
        allow => [ '127.0.0.1', '192.168.0.0/16' ],
    $app;
};

Plack::Middleware::ServerStatusと似たインターフェイスとなっています。

表示は

% curl http://server:port/monoceros-status
Processing: 2
Waiting: 98
Queued: 0

となります。各項目についてですが、

Processing: workerで処理中のソケット数
Waiting: KeepAliveなど次のリクエストの到着をまっているソケット数
Queued: workerで処理されるのを待っているソケット数

Queuedが多いようであればworker数を増やすなどの対応が必要になりそうですね。

さて、どこかサービスで使えないかなー

このブログ記事について

このページは、Masahiro Naganoが2013年5月31日 15:43に書いたブログ記事です。

ひとつ前のブログ記事は「HTTP/1.1 の Transfer-Encoding: chunked をビジュアライズするツール書いてみた」です。

次のブログ記事は「Test::TCP でサーバが起動するまで待つ時間を変更する」です。

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

ウェブページ

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