Hatena::ブログ(Diary)

na

2011-08-03

Jetty6と7をJava6と7でパフォーマンス実験してみました

rpscala第45回で黙々とパフォーマンス実験をしてきました。

Scala勉強会第45回 in 秋葉原 : ATND

勉強会第45回 - Scala勉強会 in 渋谷

内容

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インスタンスから負荷をかける構成。

OSはAmazon Linux 64bit

コンポーネントのバージョンは以下のとおり。

  • 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に変更してあります。

その他の値はデフォルトの状態です。


測定方法

  1. Jetty起動
  2. ab -n 10000 -c 100 を5回(ならし)
  3. ab -n 10000 -c 100 を5回(計測して平均request/secを取る)

数字

数値はrequest/secです。

構成スループット
Jetty6 - Java62811
Jetty6 - Java73104
Jetty7 - Java64730
Jetty7 - Java74329

おまけ

Tomcatも測ってみました。

結果、Tomcat7はNIOコネクタに変えると遅いんですが、標準のブロッキングIOのコネクタが速かったです。Jettyよりも。


構成スループット
Tomcat7.0.19 - Java65361
Tomcat7.0.19 - Java75198
Tomcat7.0.19 NIO - Java63618
Tomcat7.0.19 NIO - Java73452
Tomcat6.0.32 - Java64212
Tomcat6.0.32 - Java74370
Tomcat6.0.32 NIO - Java64578
Tomcat6.0.32 NIO - Java74211

なお、あくまでデフォルトの設定で、かつこの環境で速かっただけなので、必ずしも常にTomcat7がJetty7より速いわけではないです。

また機会があったら、もっと突っ込んで調べようと思います。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hito_asa/20110803/1312392636
リンク元