JRuby core teamのメンバーであるSun Microsystems, Nick Sieger氏は25日(米国時間)、自身のブログにおいてJRubyとRubyの双方を使ったRailsベンチマーク結果を公開した。簡単なベンチマークだが、同氏の発表した結果からはJRubyが運用に耐えうるレベルの性能を実現しつつあることが見えてくる。

これまでJRubyの性能が不十分だという指摘は何度もあった。その都度改善が実施され、間もなくリリースされるJRuby 1.1でも最大の注目点は性能の向上にある。同氏は自身が携わっているプロジェクトがJRubyの採用を決定したことをうけ、JRuby/Rubyの双方でどの程度の性能が発揮できているかを簡単なシングルリクエストベンチマークで調査した。その結果は興味深いものだ。

同氏は「MRI(C Ruby)とRails向けの高速サーバMongrel」、「開発中のJRuby 1.1とMongrel」、同じく「開発中のJRuby 1.1とGlassfish」の3つの組み合わせでそれぞれベンチマークを実施。最初のリクエストに対する処理はJRubyが圧倒的に遅いものの、繰り返し実施するうちに実行速度が向上し、最終的にMRIよりも高速に動作したことを示している。

Javaは実行中にアプリケーションの動作を高速化する技術を採用している。サーバを長く動作させるほど高速化されるJavaの特徴が、そのままJRubyに現われている。一方、MRIは最初から最後まで一定の性能を実現している。JRubyにはまだ性能チューニングの余地があり、しかもマルチコアやマルチプロセッサの性能を活用できるJavaをベースプラットフォームにしている。今後の成長も有力だ。

ただし、Cで実装されたRubyも次期バージョンから新しいVM実装を採用することで性能の大幅な改善が期待されている。したがって、このベンチマークの結果のみからJRuby on Railsを採用するのは時期尚早だといえるが、すでに容認できる性能を実現してることは間違いなさそうだ。今後も改善の余地があることから将来性のあるプロダクトだということに変わりはないだろう。

リクエストに対する処理時間のグラフ - 時間経過とともにJRubyがRubyと均衡しているようすがわかる(Nick Sieger氏ブログから抜粋)

累加平均で表示した場合 - 時間経過とともに若干JRubyの方が高速になっていることが確認できる(Nick Sieger氏ブログから抜粋)