Holy grail ! but is it really feasible...

@Andy Sorry i didn't follow all the thread but if i understand well, you
have page instance of 7.5Mb for one single instance ? This is only due to
page and component structure ?

2010/6/29 Howard Lewis Ship <hls...@gmail.com>

> It may be time to return to a more radical idea, one that is more
> technically feasible now (in release 5.2) than it was in the past.
>
> Get rid of page pooling.
>
> I'm not saying to re-create each page for each request; I don't think
> that would scale.
>
> However, it may be possible to change Tapestry so that you need only
> ONE instance of a given page (per locale). All transient (per-request)
> state for the page could be accessed indirectly, stored in a
> per-thread object (or inside the Request, as attributes).
>
> I can envision some small amount of extra overhead per request (due to
> extra levels of indirection).
>
> However, you could then process any number of threads against the
> same, single page object with no extra memory consumption: for
> example, no more duplicated Binding objects, and no more extra Maps to
> hold them all.
>
> Some parts of the Tapestry's internal implementation
> (InternalComponentResourcesImpl and ComponentPageElementImpl) would
> need some changing, i.e., a bit more synchronization around some
> critical sections.
>
> It's an exciting idea ... when will I have time to investigate it?
>
> On Tue, Jun 29, 2010 at 10:02 AM, Howard Lewis Ship <hls...@gmail.com>
> wrote:
> > Just to check ... which version of Tapestry?
> >
> > On Tue, Jun 29, 2010 at 8:48 AM, Blower, Andy
> > <andy.blo...@proquest.co.uk> wrote:
> >> I doubt anyone remembers this thread except me, but we're still having
> problems that I could do with help on.
> >>
> >> So, two months later, we have managed to improve things significantly,
> but still have very large pages and we're having a lot of trouble with the
> page pool size. What we see when we push the app too hard is that the heap
> fills until the gc thread is permanently running, and the app is essentially
> dead and unresponsive. I've been testing with 2g & 4g heaps up to now, with
> 100ms soft-wait & 200 hard limit because we need a lot of instances of some
> pages, and were running out with a 100 limit. I know I need to understand
> and do more with these values, but it's worrying because our tests are only
> requesting English pages at present and we'll have 17 languages for launch!
> So I'm rather concerned to say the least...
> >>
> >> I have a theory about what is happening that I'd like to run by the list
> and see what others think. I'm having some trouble figuring out what's
> happening at load.
> >>
> >> What I think is that when the heap gets full-ish at high load, the gc
> kicks in more and more often, slowing request processing down a little.
> (there's a fair amount of soft referenced stuff it can boot) This means that
> pages are returned to the page pool a bit later causing more page instances
> to be created which fills the heap and enters an vicious cycle with the gc
> trying to free memory and the T5 page pool trying to create more page
> instances. The reason I suspect this is because heap dumps show about 40
> PageImpl's that have not completed loading, and many more that have but are
> much smaller in size than others for the same page. (e.g. a Results PageImpl
> retaining 28k when a normal one retains 7.5Mb - very big I know, but I've
> cut it down from 14Mb)
> >>
> >> Our site has 223 pages which consume 213Mb if 1 instance of each is
> instantiated. Multiply this by 200 (hard limit) and then by 17 languages and
> worst case we'll need a heap size of 725Gb which is a little ridiculous! I
> will do more work on reducing the size of the pages but I've already done
> the easy stuff.
> >>
> >> Here's a list of the heap dominators using Eclipse MAT,
> http://lh6.ggpht.com/_YwJn8TJTqJU/TCoNT11ouZI/AAAAAAAAACI/G8eTGsth4zM/HeapDominators.png
> >>
> >> Anyone think I'm on the right track, or barking up the wrong tree
> completely?
> >>
> >> Thanks,
> >>
> >> Andy
> >>
> >>> -----Original Message-----
> >>> From: Blower, Andy [mailto:andy.blo...@proquest.co.uk]
> >>> Sent: 20 April 2010 17:42
> >>> To: 'Tapestry users'
> >>> Subject: RE: Tapestry using 1.3Gb of heap space after capacity testing
> >>>
> >>> Thanks for the link. As I said before, I don't think that we've fallen
> >>> prey to that exactly. Doing some local testing and looking at one of
> >>> our largest pages which displays search results, it has 76 component
> >>> objects, each of those will have components nested within (pretty
> >>> heavily in some cases) but nothing which has a bunch of components
> >>> where only one is used and the others are redundant. (what I think is
> >>> this uber-component thing)
> >>>
> >>> It looks like explicit repeated use of a component, rather than using a
> >>> single component in a loop, creates a lot more component objects in the
> >>> heap. I've never seen anything warning against this, and we do usually
> >>> use loops but it's not always the best solution.
> >>>
> >>> Again, looking at our results page, a single instance seems to get
> >>> 11,283 ComponentPageElementImpl instances created for it. I'm finding
> >>> it hard to find a good view of the tree to figure out what component(s)
> >>> are the main culprits for this huge number of instances.
> >>>
> >>> Thanks for any help or guidance you can give me.
> >>>
> >>> Andy
> >>>
> >>> > -----Original Message-----
> >>> > From: Thiago H. de Paula Figueiredo [mailto:thiag...@gmail.com]
> >>> > Sent: 20 April 2010 15:56
> >>> > To: Tapestry users
> >>> > Subject: Re: Tapestry using 1.3Gb of heap space after capacity
> >>> testing
> >>> >
> >>> > On Tue, 20 Apr 2010 11:41:25 -0300, Blower, Andy
> >>> > <andy.blo...@proquest.co.uk> wrote:
> >>> >
> >>> > > Uber-component anti-pattern, not to my knowledge, but we have a lot
> >>> > of
> >>> > > pages and components now. And a lot of logic in them. The project's
> >>> > > large enough I can't be sure. Do you have a handy link to Howard's
> >>> > > description so I can get my team to check?
> >>> >
> >>> > It's here:
> >>> >
> http://old.nabble.com/-T5.0.18--Out-of-Memory-Error---Potential-Leak-
> >>> > (doesn't-reduce-after-forced-GC)-to25403474s302.html#a25497441
> >>> > That thread is interesting, by the way. The problem is more about how
> >>> > components and pages are written than the number of them.
> >>> > What Tapestry version are you using?
> >>> >
> >>> > > Page pool config is default, I don't know enough to fiddle yet.
> >>> Also,
> >>> > > the test is on a single stand alone server with no clustering, we
> >>> are
> >>> > > using Tomcat clustering for production.
> >>> >
> >>> > You should take a look a them, as they can affect the memory
> >>> > consumption
> >>> > directly.
> >>> >
> >>> > > I did fire the GC manually before getting concerned BTW. A lot of
> >>> > heap
> >>> > > seems to be taken up with 100-300k descriptions on the
> >>> > > InternalClassTransformationImpl class. An example of one is
> >>> attached
> >>> > > below - seems wrong to me and more like the debug that can be
> >>> > requested
> >>> > > through log4j rather than a description.
> >>> >
> >>> > They look really bigger than they should. 300k is a lot. I have one
> >>> > application with a reasonable number of pages and components and it
> >>> > runs
> >>> > inside a 512 MB slide at SliceHost without using the whole memory.
> >>> >
> >>> > --
> >>> > Thiago H. de Paula Figueiredo
> >>> > Independent Java, Apache Tapestry 5 and Hibernate consultant,
> >>> > developer,
> >>> > and instructor
> >>> > Owner, software architect and developer, Ars Machina Tecnologia da
> >>> > Informação Ltda.
> >>> > http://www.arsmachina.com.br
> >>> >
> >>> > ---------------------------------------------------------------------
> >>> > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> >>> > For additional commands, e-mail: users-h...@tapestry.apache.org
> >>> >
> >>
> >>
> >
> >
> >
> > --
> > Howard M. Lewis Ship
> >
> > Creator of Apache Tapestry
> >
> > The source for Tapestry training, mentoring and support. Contact me to
> > learn how I can get you up and productive in Tapestry fast!
> >
> > (971) 678-5210
> > http://howardlewisship.com
> >
>
>
>
> --
> Howard M. Lewis Ship
>
> Creator of Apache Tapestry
>
> The source for Tapestry training, mentoring and support. Contact me to
> learn how I can get you up and productive in Tapestry fast!
>
> (971) 678-5210
> http://howardlewisship.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>


-- 
Regards,
Christophe Cordenier.

Committer on Apache Tapestry 5
Co-creator of wooki @wookicentral.com

Reply via email to