- 2009/10/16 金曜日 18:17:20
- perl
mod_psgi をインストールしてみたをみて速くなるなら試してみようということでmod_psgiを試してみますた。
まずはこんな感じの簡単なPSGIアプリで。
my $app = sub {
    return ['200', [Content-Length => '5'], ['hello']];
};
ab -n 10000 -c 100 mod_psgi Requests per second: 1403.51 [#/sec] (mean) mod_perl Requests per second: 668.33 [#/sec] (mean) Standalone Requests per second: 702.46 [#/sec] (mean) Standalone::Prefork Requests per second: 725.78 [#/sec] (mean)
おおおお。超絶早いですね!
(plackupの際に-E product(development以外ならなんでもおk)をつけないとだいぶ遅くてそれをそのまま載せてたのを修正しました)
で、お次は、Catalyst::Engine::PSGIを使ってCatalystのhello worldなアプリを。
catalyst.pl Hello
で作って、debugモードを切って、Root.pmのindexで
    $c->response->content_type('text/plain');
    $c->response->body( 'hello' );
こんな感じにしたもの。
ab -n 1000 -c 10 mod_psgi Requests per second: 207.87 [#/sec] (mean) mod_perl Requests per second: 144.94 [#/sec] (mean) cat-standalone Requests per second: 184.95 [#/sec] (mean)
おおおおお。早いですね!!これはこれだけでも乗り換える意味がありそうだ。と思ってたんですが現在実運用中のCatalystアプリでやってみたところ”child pid 32320 exit signal Segmentation fault (11)”とかいって死にました。うーむ。これは再現する最小構成を探ってid:spiritlooseさんにフィードバックしたいところですね。
casual-perlerな人たちは今持ってるCatalystアプリをmod_psgi+Catalyst::Engine::PSGIで動かしてどんどんフィードバックするといいんじゃないかな!
コメント:0
- spiritloose 2009/10/17 土曜日
- どうもです。 
 catchsegv /usr/local/apache2/bin/httpd -X とかで起動してリクエスト送るとバックトレースでますかね?
 出たら教えていただけると助かります。
- Chiba Masahiro 2009/10/17 土曜日
- >spiritloose 
 えーとすみません。まず、セグフォが出たのはcentos5.3上でして、本文中に「現在実運用中のCatalystアプリでやってみた」とあるのだけcentos5.3上でやっていて勘違いをしてしまっていたのですが、centos5.3上では一番上の「簡単なPSGIアプリ」も動かなかったです。
 ちなみにその他はdebian lennyで動かしてました。で、debian上だと実運用なCatalystアプリも動きました。FUDでしたね、、、。
 で、centos5.3の環境ですが
 perl: perl-5.8.8-18.el5_3.1.i386
 Apache: httpd-2.2.3-22.el5.centos.2.i386
 Linux: 2.6.18-128.7.1.el5
 てとこです
 catchsegvの結果は
 http://pastie.org/658069
 にはっつけてみました。- あと、先ほどgit pullして4b4d6aa4bd30a8eb51652f2c4e6e21556e593559のバージョンにしてmakeしなおしてみたところ、 
 undefined symbol: CLEAR_ERRSV
 こんなエラーがhttpd立ち上げ時にでましたです。
 perl 5.8なのが悪いんすかねー。centosに5.10いれて試してみようかな。
- Chiba Masahiro 2009/10/17 土曜日
- あ、あともう一点、これはdebian lennyでの話なんですが 
 DocumentRootを使うと、psgi側にhandleがわたらない感じです。
- spiritloose 2009/10/17 土曜日
- なるほど。どうもです。 
 > debian上だと実運用なCatalystアプリも動きました
 :)
 開発は今のところ以下の環境でやってます。Perl 5.8系はまだ見れてないですね。
 http://d.hatena.ne.jp/spiritloose/20091002/1254467284
 ぼちぼち対応していきたいと思います。- >DocumentRootを使うと、psgi側にhandleがわたらない感じです。 
 というのはよくわからないんですがどういう状況ですか?
- Chiba Masahiro 2009/10/17 土曜日
- >spiritloose 
 どもども。
 ちなみにCLEAR_ERRSVは5.10.1からのマクロっぽいすねー。- >>DocumentRootを使うと、psgi側にhandleがわたらない感じです。 
 >というのはよくわからないんですがどういう状況ですか?
 えーとhandleがわたらないというのはうそでした。
 で、その後いろいろ調べた感じでは、DocumentRootを付けるとSCRIPT_NAMEに本来はPATH_INFOなものが入ってしまいCatalyst側で正しくdispatchできてないという現象でした。
- Chiba Masahiro 2009/10/17 土曜日
- ↑んでもって今4b4d6aa4bd30a8eb51652f2c4e6e21556e593559のCLEAR_ERRSVだけ手元でコメントアウトしてみたところ、SCRIPT_NAMEとPATH_INFOの件は直ってました! 
 どうやら
 430ccf9e50ebbcf763216bed34dbddcab39a5ce4
 と
 cad20bffc4804437476c6f1f2d062b017259607d
 あたりのコミットのおかげぽいですね。つか、ちゃんと検証リビジョン示さないと混乱させまくりだな・・・。しかしgitはリビジョん指定がめんどい・・・。
- spiritloose 2009/10/17 土曜日
- CLEAR_ERRSVは直しておきました。 
 5.8系は引き続き見ていきます。
- Chiba Masahiro 2009/10/17 土曜日
- お。spiritloose++ 
 5.8は自分もなんか気づいたらフィードバックしますー。
- spiritloose 2009/10/18 日曜日
- 手元のCentOSでとりあえず動いたっぽいです。 
 環境は同じく
 perl: perl-5.8.8-18.el5_3.1.i386
 Apache: httpd-2.2.3-22.el5.centos.2.i386
 Linux: 2.6.18-128.7.1.el5
 です。
 pull して autoconf しなおして試してみてください。
- Chiba Masahiro 2009/10/18 日曜日
- おお! 
 動きました!素晴らしい!
 spiritloose++
トラックバック:0
- この記事のトラックバック URL
- https://blog.everqueue.com/chiba/2009/10/16/358/trackback/
- トラックバックの送信元リスト
- mod_psgi試してみた - へぼい日記 より
