2011-08-03
Jetty6と7をJava6と7でパフォーマンス実験してみました
rpscala第45回で黙々とパフォーマンス実験をしてきました。
内容
Jetty6とJetty7のパフォーマンス実験です。
Java6とJava7をそれぞれ組み合わせて、単純なアプリケーションのスループットを測りました。
なんでこれをScala勉強会でやってるのか、というと、動かしているアプリケーションがScalatraだからです。
要するに、ScalaのWebアプリケーションを載っけるのに、Jetty6と7、どっちが速いのか+Java7だったらどうなのか、という実験です。
結果
- Jetty7 + Java6が最速でした。
というわけで、ScalaのWebアプリならJetty7をJava6で使うと速いです。Jetty側でいろいろと最適化されているものと思われます。
なお、Jetty6ではJava6よりもJava7のほうが多少速かったので、Java7が遅いという訳ではないようです。
※ 限られた実験結果です。業務で使う人はもっとちゃんと実験しましょう。
環境
EC2のlargeインスタンス1でJettyを動かし、もう1つのlargeインスタンスから負荷をかける構成。
各コンポーネントのバージョンは以下のとおり。
- Jetty7 7.4.5
- Jetty6 6.1.26
- JDK7 GA
- JDK6 1.6.0 u26
動かしたアプリケーション
このmaven archetypeで作ったサンプルアプリケーション(HelloWorld)
Srirangan/simple-scalatra-archetype - GitHub
の
ScalaとScalatraのバージョンを以下のとおり変えたものです。
- Scala 2.8.1 => 2.9.0-1
- Scalatra 2.0.0M3 => 2.0.0M4
mvn packageでビルドしたwarをjettyのwebappディレクトリにデプロイして動かしました。
Jettyの設定
Jetty7の設定に合わせて、Jetty6のNIOコネクタのlowResourcesConnectionsを5000から20000に変更してあります。
その他の値はデフォルトの状態です。
測定方法
- Jetty起動
- ab -n 10000 -c 100 を5回(ならし)
- ab -n 10000 -c 100 を5回(計測して平均request/secを取る)
数字
数値はrequest/secです。
| 構成 | スループット |
|---|---|
| Jetty6 - Java6 | 2811 |
| Jetty6 - Java7 | 3104 |
| Jetty7 - Java6 | 4730 |
| Jetty7 - Java7 | 4329 |
おまけ
Tomcatも測ってみました。
結果、Tomcat7はNIOコネクタに変えると遅いんですが、標準のブロッキングIOのコネクタが速かったです。Jettyよりも。
| 構成 | スループット |
|---|---|
| Tomcat7.0.19 - Java6 | 5361 |
| Tomcat7.0.19 - Java7 | 5198 |
| Tomcat7.0.19 NIO - Java6 | 3618 |
| Tomcat7.0.19 NIO - Java7 | 3452 |
| Tomcat6.0.32 - Java6 | 4212 |
| Tomcat6.0.32 - Java7 | 4370 |
| Tomcat6.0.32 NIO - Java6 | 4578 |
| Tomcat6.0.32 NIO - Java7 | 4211 |
なお、あくまでデフォルトの設定で、かつこの環境で速かっただけなので、必ずしも常にTomcat7がJetty7より速いわけではないです。
また機会があったら、もっと突っ込んで調べようと思います。




