Alexey Verkhovsky wrote:
Hi all,

Here are some tidbits about current JRuby trunk performance with a
real application.

So, I'm running Mingle
(http://studios.thoughtworks.com/mingle-project-intelligence) trunk,
against a copy of some large (by Mingle's standards) production
database. Fairly evolved load test. Comparing JRuby rev. 5338 with
Ruby 1.8.5 p35.

MRI is about 10-15% faster, but takes ~20% more memory.

To elaborate on the memory footprint: after we made MetaClass#attached
a weakref (drastically cutting Mingle's RAM usage in the process), 9
JRuby runtimes with Mingle fit into -Xmx350m, using ~450 Mb of RSS
under load. A good full GC run takes the heap down to 250-270 Mb. In
comparison, a single Mingle runtime on MRI uses up ~60 Mb RSS. For 9
runtimes, that's about 20% more memory than JRuby.

Conclusion: as far as Mingle is concerned, JRuby trunk performs as well as MRI.

Another interesting factoid is about JRuby JIT compiler. Mingle
redefines some classes on each request, and for this reason doesn't
gain much from JIT (this should change soon). In fact, in the above
tests, Mingle was configured running in fully interpreted mode. When
JRuby JIT compilation is enabled, it blows permgen out of all
proportion. Not surprising, since each JITed method requires its own
class and classloader, Mingle has a lot of methods, and there are 9
copies of everything. Sigh...
But setting max perm gen space to 256M fixed that for me. I think about 150M should be enough though, based on memory profiling I did.

Cheers

--
Ola Bini (http://ola-bini.blogspot.com) JRuby Core Developer
Developer, ThoughtWorks Studios (http://studios.thoughtworks.com)
Practical JRuby on Rails (http://apress.com/book/view/9781590598818)

"Yields falsehood when quined" yields falsehood when quined.



---------------------------------------------------------------------
To unsubscribe from this list please visit:

   http://xircles.codehaus.org/manage_email

Reply via email to