JRuby slowdown from Rails 2.0.2 to 2.1.0

Before you decide to bring your current JRuby on Rails app to the latest 2.1.0 version… you may want to take a look at the performance. I was running the console benchmark from this blog post with jruby trunk and saw some numbers I wasn’t expecting:


in console: 6.times {puts Benchmark.measure {10000.times {Person.find :first}}.total}
4.47 : jruby 1.1.2 & rails 2.0.2 (jdbc)  (best out of 6 runs)
5.43 : jruby 1.1.2 & rails 2.1.0 (jdbc)
4.12 : jruby 1.1.3 (trunk) & rails 2.0.2 (jdbc)
5.06 : jruby 1.1.3 (trunk) & rails 2.1.0 (jdbc)

JRuby trunk IS faster than 1.1.2 as expected, but JRuby overall is experiencing a (pretty significant) slowdown when running Rails 2.1.0.

Hopefully finding the culprit for this slowdown will open the floodgates for improving JRuby on Rails performance.

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • Digg
  • Reddit
  • DZone

8 Responses to “JRuby slowdown from Rails 2.0.2 to 2.1.0”

  1. And the MRI numbers of the same benchmark?

  2. I don’t actually see much of a difference, in both JRuby and Ruby, the newer rails/activerecord is slower by 10% or so.

    So, JRuby is getting faster (and the trunk is faster than released version 1.1.2), but newer activerecord is a bit slower with both JRuby and MRI, and I’m not sure why.

  3. @Christian Seller : ruby 1.8.6 for both Rails 2.0.2 and 2.1.0 were about 5.06 so there was no noticeable slowdown there

  4. @Vladimir : interesting you saw no difference…

  5. Oh, with my setup things are even worse for JRuby.
    Setup: JRuby 1.1.2 / Ubuntu / latst JDK6 / activerecord-jdbc-adapter 0.8.1

    RAILS 2.1
    5.95 jdk6 -J-server
    2.68 MRI

    RAILS 2.0
    5.45 jdk6 -J-server
    3.1 MRI

    So Rails 2.1 is faster with MRI while it’s slower with JRuby.
    And JRuby/AR-JDBC is generally much slower than MRI.

    @Mike: Which OS are you on?

  6. @Christian: Mac OS X (10.4) I have not had a chance to check things out on Linux yet.

  7. latest JRuby trunk runs the test faster with Rails 2.1 than with 2.0:

    JRuby rev7134
    ————-
    Rails 2.0
    5.34 jruby -J-server -J-Xshare:off script/console
    5.30 jruby -X-C -J-server -J-Xshare:off script/console

    Rails 2.1
    5.39 jruby -J-server -J-Xshare:off script/console
    5.53 jruby -X-C -J-server -J-Xshare:off script/console

    rev7165
    ——-
    Rails 2.0
    5.27 jruby -J-server -J-Xshare:off script/console
    5.43 jruby -X-C -J-server -J-Xshare:off script/console
    5.21 jruby -J-server -J-Djruby.compile.fastest=true -J-Xshare:off script/console

    Rails 2.1
    5.23 jruby -J-server -J-Xshare:off script/console
    5.31 jruby -X-C -J-server -J-Xshare:off script/console
    5.18 jruby -J-server -J-Djruby.compile.fastest=true -J-Xshare:off script/console

  8. I just found out that jirb turns on ObjectSpace which makes script/console pretty much useless for benchmarking. Numbers without ObjectSpace look much better:

    Rails 2.1
    3.82 jruby -J-server -J-Xshare:off script/console
    3.85 jruby -X-C -J-server -J-Xshare:off script/console
    3.75 jruby -J-server -J-Djruby.compile.fastest=true -J-Xshare:off script/console

Leave a Reply