ECサイトの本番環境で使いそうなサーバーが評価機で手に入ったので、使う候補のフレームワークのパフォーマンスを量ってみた。気にしてるのは主にスループット。レイテンシは揺らぎが大きそうだから。
環境
- Xeon 2.33GHz Quad Core 6144 KB x 2
- 4G MEM
Apache
Timeout 300 KeepAlive OffStartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0
Tomcat
maxThreads="200" minSpareThreads="25" maxSpareThreads="75" acceptCount="100" connectionTimeout="20000" CATALINA_OPTS="-server -Xmx1024M -Xms1024M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/tomcat/logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home"
ApacheもTomcatも設定ファイルはデフォルトな感じで、その辺のチューニングは全然してない。だから、もうちょっと引っ張れるかも。あと、TCPのTIME_WAITもデフォルトのまま。だから、netstat -aすると大変なことになる。
テストツール
abで。
Requests per second を重視して、スループットがどれくらいでるかをみる。
同時リクエストは100〜450くらいのあいだで、最大リクエストは30000〜50000くらいまで。50000まで行ければ試す感じ。同時リクエストは頭打ちになるところまで試す。
思ったこと
- 最近のサーバーはすごい
- AJPのオーバーヘッドは気にしなくていいレベルみたい
3回くらいくりかえした平均のRequests per second
同時リクエストを100〜450くらいまでいろいろ試して、一番成績がよかったところで3回くらい繰り返した結果が、こんな感じ。
静的なファイルをapacheが返す | 12000くらい |
TomcatにJSPをリクエスト | 5500くらい |
AJPで繋いでJSPをリクエスト | 5500くらい |
CubbyのExampleのhelloをリクエスト | 1200くらい |
T2 FrameworkのExamplesのhelloをリクエスト | 4500くらい |
T2 Frameworkが早いけど、heapにガンガン積みまくってheapを使い切っちゃう。Lucyの問題かなー。Guiceとの組み合わせで試してみるか。
あと、一回だけ、org.t2framework.lucy.exception.TooManyRegistrationException ってエラーがでた。
スタックトレースは残しとくの忘れてた。
あとあと、
org.t2framework.lucy.exception.TooManyRegistrationException: [ELucyCore0005]interface javax.servlet.http.HttpServletRequestというキーで複数のコンポーネントが登録されています.
というエラーがログにたくさん。作りの問題かな。ちゃんと気をつけて作れば大丈夫?
あとは、WicketとClickも試してみよう。