サーバ環境:Herokuの公開用サーバのWeb Dynos(無料枠なので1Dynos)
アプリ環境:Web DynosのCedarスタック上のNode.jsアプリ(Hello Worldを返すだけ)
クライアント環境:MacOSX(Lion)上の標準Java上のJmeter
最初、MacOSXに標準で同梱されているApache Bench(abコマンド:こんなのも同梱されてるって、どんだけ開発者寄りなんだOSX!)で、さくっと感覚だけ掴んでみるべ、と思ったんだけど、並列リクエスト数4(-c 4)あたりからなんだか挙動がおかしなことになってきて、Socketエラーが出てしまう。
これは明らかにHerokuの問題じゃなさそうだな、、、と思ってググってみると、標準のabはイケてないので、ソースからビルドし直した、なんて記事があったりしてガックリ。
ソースから入れ直すのもいいけど、標準abと入れ直したabが混在するのも構成管理上気持ち悪いし、いっその事Jmeterで真剣にやるか、ってな感じに決着がついた(自分内で)。
で、結論的には、
350req/sec(Keep-Alive無効時)
500req/sec(Keep-Alive有効時)
あたりのスループットまで到達した。
ここまでくるとそれ以上に行くためのネックがサーバなのかクライアントなのかネットワークなのかは置いておいても、十分すぎるほどの性能。
前述の通り、アプリは何も処理してないに等しいのは確かだけど、1Dynos(=1プロセス<1物理CPUcore、でいいのかな)だけで、350ものコネクション(/sec)の切った張ったをできるだけでも超優秀と言ってもいいんじゃないだろうか。
いじりがいがあるな〜。
(尚、レスポンスタイムはおおむね400ms前後で、こっちはちょっと残念な感じ。サーバが米国だから仕方ない面もあるけど、400msあると人は引っかかりを感じるだろうから、アプリっぽいWebアプリを、サクサク動かすにはちょっとつらいか)