esme-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Markus Kohler <>
Subject Further analysis of the GC issue
Date Wed, 25 Nov 2009 17:14:58 GMT
Hi all,
the Garbage Collector issue I was talking about is reproducible.
I've uploaded an annotated GC graph to

I think the "LOGON" phase where I logon all the 300 users looks ok (given
that probably textile formatting is involved) but the phase where just one
user sends one message is certainly not looking good.

I took the profiler and the result is a bit shocking. For that one message,
881.000.000 objects weighting  23,2 Gbyte where allocated (and reclaimed
afterwards). My former record was 2Gbyte ;-)

Fortunately I have a theory what happens, without looking into the code,yet,
so take it with a grain of salt. It seems that the public time line for all
users is re-rendered, because 99% of the allocations come
from org.apache.esme.comet.PublicTimeline.render(). I guess all the actors
for all the users are sitting there, not knowing that the user has closed
the browser, because the user session has not yet expired.

I wonder how we get around this with a real "push" model. If the browser
would ask for updates this rendering could be done lazily. Or can we "ping"
the browser and check whether it responds?
On the other side. It should also not be necessary the re-render the message
again and again because the result will be the same.

I will send Richard some attachments. Not sure whether you will need them,
they look very similar to the ones we already have.

BTW, we should definitely check the use
of scala.xml.XML$.loadString(java.lang.String)
It's creating a new Parser each time, which is a bit costly because it
allocates a new Buffer each time and also hits the disk, when searching for
the name of the Java class.


"The best way to predict the future is to invent it" -- Alan Kay

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message