Catalystアプリでstarmanとかplackをabベンチ
catalystアプリケーションでstarmanを使ってみてabしてみた
ab -n 100 -c 10 http://127.0.0.1:5000/
catalyst server
Requests per second: 15.50 [#/sec] (mean)
starman script/myapp.psgi --host 127.0.0.1 -I lib port 5000 --disable-keepalive --user www
Requests per second: 25.82 [#/sec] (mean)
starman script/myapp.psgi -MCatalyst -MDBIx::Class --host 127.0.0.1 -I lib port 5000 --disable-keepalive --user www
Requests per second: 36.08 [#/sec] (mean)
starman script/myapp.psgi --workers 10 -MCatalyst -MDBIx::Class --host 127.0.0.1 -I lib port 5000 --disable-keepalive --user www
Requests per second: 41.69 [#/sec] (mean)
Apacheプロキシ経由(keepalibe off) starman script/myapp.psgi --workers 10 -MCatalyst -MDBIx::Class --host 127.0.0.1 -I lib port 5000 --disable-keepalive --user www
Requests per second: 25.44 [#/sec] (mean)
ちなみに--workers 100したらスワップしまくってload average100とかいくのでworkersの数には注意、サーバの身の丈にあった数にしましょう。 なんか遅いなあ時間かかるなあと思ったらサーバが死にそうでした あとworkersをworkerと書いてた事もあったりしました
workersを増やす=たくさん処理できるって考えると、なるべく多くメモリ積むか、利用メモリが少なくなるように書いたほうがいいのかなーってそこまでするならcatalyst使わない方がいいじゃないかとかいろいろ考えた。
Catalystでキャッシュとか
最近さくらの一番安いサーバにあるサイトを引っ越しさせたんだけど、CPUが大変になっていたのでキャッシュしようとおもったわけです。 以前利用していたさくらの専用サーバはアドバンスドの中ぐらいの奴で、メモリ増やしたりとまあそこそこ良かったんだけど、違うサーバに帯域使うやつ移動させるし、7800円サーバ安いし月末だしって事で思い切って移動させてみた。で正規表現たくさんつかってたり、いろいろCPU結構きっついなあって事でキャッシュ。 今まではCatalyst 5.7系で頑張っていたんだけどこれを機に5.8に変更、そのままでも良かったんだけどなんとなく。
Catalyst::Plugin::Cache
http://search.cpan.org/~bobtfish/Catalyst-Plugin-Cache-0.10/
Catalyst::Plugin::Cache
使い方見るとkei,valueのset,getでmemcachedと同じ というかこれmemcachedつかってるならあんま意味無いかな。 バックエンドやらなにやら選べたり、つくったりしたりするときおんなじAPIで使えるっての利点なのかな。 Catalystのpluginらしいモジュールなのかなとか
Catalyst::Plugin::PageCache
http://search.cpan.org/~mramberg/Catalyst-Plugin-PageCache-0.22/
こちらは出力するページ自体をキャッシュしてしまうやつ。 これは前から知ってたのでこれでも使おうかなと思って調べてついでに久しぶりにブログでも囲うかなというかんじなのですわいよ
使い方はかんたんす。 いろんな制御も簡単。Catalystクックブックにものってる。 ちなみにPageCacheはpluginの最後に書く必要がある。
キャッシュはCatalyst::Plugin::Cache::FastMmap, Catalyst::Plugin::Cache::FileCache, Catalyst::Plugin::Cache::Memcachedから選べる
以上適当です。 詳しくはドキュメント見てください
アクセスもとIPアドレスを設定する
サーバには複数のIPアドレスがくっついてるけど、IP変えてアクセスしたいなあと思ってLWP::UserAgentを使う際に接続するIPアドレスをどう設定すればいいのかなあと調べてみた。
どうぐぐったらいいかわからなかったけど、結局公式のドキュメントみたらなんとなくわかった
$ua->local_address( $address ) Get/set the local interface to bind to for network connections. The interface can be specified as a hostname or an IP address. This value is passed as the LocalAddr argument to IO::Socket::INET.
バインドとかbindでぐぐるとよかったのかな。
うー久しぶりにブログ書いた。
google app engineでエラー
Traceback (most recent call last): File "GoogleAppEngineLauncher.py", line 42, in <module> File "wx\_core.pyc", line 7913, in __init__ File "wx\_core.pyc", line 7487, in _BootstrapApp File "launcher\app.pyc", line 53, in OnInit File "launcher\app.pyc", line 97, in _CreateModels File "launcher\maintable.pyc", line 35, in __init__ File "launcher\maintable.pyc", line 86, in _LoadProjects File "launcher\project.pyc", line 63, in ProjectWithConfigParser File "launcher\project.pyc", line 260, in _LoadFromConfigParser File "ConfigParser.pyc", line 520, in get ConfigParser.NoOptionError: No option 'name' in section: '1'
なエラーがでて「google_appengine_projects.ini」を削除すればいいラインだけど、google_appengine_projects.iniがdocument and settingsにあるという記述があったので見てみたけど、見つからない。 結局あった場所は環境変数homeに設定してあった場所でした。 探すのに大変時間がかかった。