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の遅さが際立っています。これはたぶん書いたコードが負荷に対応できるような形にはなっていないのだろうと思います。明日のネタにしましょう。