Return-Path: Delivered-To: apmail-incubator-esme-dev-archive@minotaur.apache.org Received: (qmail 52003 invoked from network); 25 Nov 2009 17:15:32 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 25 Nov 2009 17:15:32 -0000 Received: (qmail 17319 invoked by uid 500); 25 Nov 2009 17:15:32 -0000 Delivered-To: apmail-incubator-esme-dev-archive@incubator.apache.org Received: (qmail 17265 invoked by uid 500); 25 Nov 2009 17:15:32 -0000 Mailing-List: contact esme-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: esme-dev@incubator.apache.org Delivered-To: mailing list esme-dev@incubator.apache.org Received: (qmail 17131 invoked by uid 99); 25 Nov 2009 17:15:30 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Nov 2009 17:15:30 +0000 X-ASF-Spam-Status: No, hits=2.2 required=10.0 tests=HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of markus.kohler@gmail.com designates 209.85.211.188 as permitted sender) Received: from [209.85.211.188] (HELO mail-yw0-f188.google.com) (209.85.211.188) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Nov 2009 17:15:22 +0000 Received: by ywh26 with SMTP id 26so6860950ywh.12 for ; Wed, 25 Nov 2009 09:15:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=MuNB47lshYyWSPB+TsxmhZEHrKKNRLKgUt0LW8Ze/S8=; b=BTisjIZ8A+CqmA/xrJcobdL9o9Gk2SFleDZ6PhjD3Lbu4ceK8w0AFb9Os6RzY0TiQH M4JzyffSxp/WbuqsjIrMADikyihU2rMLioGCr93wMQCdln4YpYhdDRQyiTq7vO0N4nc/ oA5AGoUlRLXSfFwGa+RN53cQV9F7guA2VbRlM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=NDur6SZ0w74zfetPPZKzGj1UAvQWtCRHxMZ8uoTbJ53maWC18sIQsT2lmQvNagZavu eZ+KaphCvPOFgUimEdjKFIvwaqw2pPZBxzVendrAnAWoOP/1vTkFjEr4vdLvKvHt4XqK 4hAMvcXynzWiHIgEHpuM6UzZbmkYyMBmiollY= MIME-Version: 1.0 Received: by 10.90.176.16 with SMTP id y16mr10582986age.52.1259169298633; Wed, 25 Nov 2009 09:14:58 -0800 (PST) Date: Wed, 25 Nov 2009 18:14:58 +0100 Message-ID: <771905290911250914q5ee704a4r1cd2c723f25b0dc7@mail.gmail.com> Subject: Further analysis of the GC issue From: Markus Kohler To: esme-dev@incubator.apache.org Content-Type: multipart/alternative; boundary=00163630ebe9c232af047935327b X-Virus-Checked: Checked by ClamAV on apache.org --00163630ebe9c232af047935327b Content-Type: text/plain; charset=ISO-8859-1 Hi all, the Garbage Collector issue I was talking about is reproducible. I've uploaded an annotated GC graph to http://picasaweb.google.com/lh/photo/wB-RRtb0wIVfpxJkTJPNuw?authkey=Gv1sRgCOve7LThpfvXsQE&feat=directlink 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. Greetings, Markus "The best way to predict the future is to invent it" -- Alan Kay --00163630ebe9c232af047935327b--