Java のサーブレットコンテナ、まぁ Jetty なんですけど、Jetty の HTTP サーバーとしての性能がどれくらいか分かる資料が無かったので、Ruby でベンチマークを計測するスクリプトを書いてみました。ついでにサーブレットも計測しています。benchmark モジュール初挑戦。
# coding: utf-8 require "open-uri" require "benchmark" HTML_URL = "http://192.168.56.101:8080/helloworld/" SERVLET_URL = HTML_URL + "hello" # ベンチマーク対象のメソッド def open_service(uri) # 指定した URI にアクセスしてレスポンスを取得するだけ open uri do |s| s.read end end # 渡したブロックを 1, 10, 100, 1000 回繰り返すのにかかる時間を計測 def do_benchmark(caption, &block) Benchmark.benchmark(caption + Benchmark::CAPTION, 7, Benchmark::FMTSTR) do |r| [1, 10, 100, 1000].each do |n| # block を n 回繰り返したときのベンチマーク r.report n.to_s do n.times &block end end end end # 静的ファイルにアクセス do_benchmark("static ") do open_service(HTML_URL) end puts # サーブレットにアクセス do_benchmark("servlet") do open_service(SERVLET_URL) end
このスクリプトを実行した結果は次の通り。
C:\work>ruby benchmark_jetty.rb static user system total real 1 0.078000 0.312000 0.390000 ( 0.419042) 10 0.016000 0.000000 0.016000 ( 0.128013) 100 0.156000 0.078000 0.234000 ( 1.221122) 1000 0.764000 1.560000 2.324000 ( 12.743274) servlet user system total real 1 0.000000 0.000000 0.000000 ( 0.014002) 10 0.000000 0.016000 0.016000 ( 0.134013) 100 0.063000 0.156000 0.219000 ( 1.281129) 1000 1.451000 0.670000 2.121000 ( 13.073307)
このスクリプトで計測したデータが、実際に役に立つかどうかは微妙ですけどね。ていうか、たぶん JMeter あたりを使って計測し直すこと間違いなし。