nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

JBoss EAP 6.2でEJBのnative, IIOP, JAX-WS, JAX-RS呼び出しのパフォーマンスを計測してみる

JBoss / WildFly (全部俺) Advent Calendar 2013の12日目です。

昨日全部入りEJBを作ったので各呼び出しインタフェースのパフォーマンスを軽く測ってみようと思います。未チューニングかつ計測対象も短いStringをSystem.out.println()してechoするだけというシロモノなので、てきとーなものであることに注意してください。実際のペイロードや処理、チューニングなどにより結果は変わります。

20スレッドのスレッドプールに10000回呼び出しを投げて全部終わるまでを計測します。回す対象ですが、EJBはContextの生成後のルックアップから、JAX-WSはServiceが使い回せるのでPortの取得から、JAX-RSは特に初期化はないのでリクエスト発行してるところを回します。

def with_executor(f)
  executor = Executors::newFixedThreadPool(20)
  10000.times do
    executor.execute(f)
  end
  executor.shutdown()
  executor.awaitTermination(30, TimeUnit::SECONDS)
end

計測はRubyのBenchmark::measureを使っています。出力はuser, system, user+system, (elapsed)です。

$ jruby load.rb native
  3.080000   0.780000   3.860000 (  3.468000)
$ jruby load.rb iiop
  9.300000   2.120000  11.420000 (  9.142000)
$ jruby load.rb ws
 11.730000   1.520000  13.250000 (  8.017000)
$ jruby load.rb rs
 32.460000  12.720000  45.180000 ( 16.139000)

nativeが高速でIIOPやJAX-WSが遅いというのは予想通りだと思いますが、JAX-RSの遅さが際立っています。これはたぶん書いたコードが負荷に対応できるような形にはなっていないのだろうと思います。明日のネタにしましょう。