Actually Robert, I'd love it if you could patch/override T5 core just
enough to disable SoftReferences and re-run your test. The results may
surprise you. I could almost guarantee you'd see the same performance
pattern for any modern jpa 2.x application. At 1.2GB, it doesn't look like
your test setup is just a synthetic, lightweight t5 app with no back end,
is it?

Kalle
On Apr 1, 2015 3:44 PM, "Kalle Korhonen" <kalle.o.korho...@gmail.com> wrote:

> A configurable cache might be ok but what Robert is showing is a highly
> typical performance degradation pattern for any sufficiently large Java
> application. Tapestry's page cache is hardly the only place where soft
> references are used. When your memory budget is too small, most system
> engineers would argue that it's far better to slow down the application
> than OoM, but obviously that depends on the type of application and the
> traffic patterns you are facing. For the consumer facing application, it's
> not uncommon to see peak traffic 30-100 times over the averages at least
> with the applications I've been involved with and I would hate to to budget
> all resources based on peak consumption only. On the other hand, if the
> number of pages on the site is small and the site is evenly in use, then
> sure, it'd make sense to never purge.
>
> Kalle
>
> On Wed, Apr 1, 2015 at 3:01 PM, Howard Lewis Ship <hls...@gmail.com>
> wrote:
>
>> I'm feeling that Robert is making a very good case here. I could imagine a
>> page-level annotation to either enable or disable evication of a page
>> instance after a period of time ... but that can come later. I do think
>> that hard-caching of pages will leading to more predictable response
>> performance.
>>
>> On Wed, Apr 1, 2015 at 7:31 AM, Robert Schmelzer <rob...@schmelzer.cc>
>> wrote:
>>
>> > Hi,
>> >
>> > I now found time to sum up a short report about that topic.
>> >
>> > I summarized my results in following pdf file:
>> > http://www.schmelzer.cc/Downloads/Files/Tapestry-Memory-Performance.pdf
>> >
>> > The main issue is, that you are able to bring a Tapestry based system
>> into
>> > a situation where it gets slower and slower and finally event not
>> > responding any more, just be decreasing memory on the JVM and you DO NOT
>> > get any error message or OutOfMemory warning or GC overhead warning.
>> And
>> > that only because the PageImpl instances are held in SoftReferences. My
>> > opinion is still, that this does not work as it is supposed to do and I
>> > keep with my example about other infrastructure. You would not expect
>> e.g.
>> > Spring beans or a hibernate configuration to get thrown away under
>> memory
>> > preasure - you would expect them to fail with OutOfMemory if they are
>> not
>> > able to hold their necassary static information in memory.
>> >
>> > Regards
>> > Robert
>> >
>> >
>> >
>> >
>> > Am 19.03.2015 um 17:55 schrieb Kalle Korhonen:
>> >
>> >> On Thu, Mar 19, 2015 at 12:24 AM, Robert Schmelzer <rob...@schmelzer.cc
>> >
>> >> wrote:
>> >>
>> >>  Sorry, I was unprecise - my example should have referenced to the
>> >>> EntityManagerFactory (SessionFactoryImpl in Hibernate). You would not
>> >>> expect them, to throw away its cached configuration on memory
>> preasure. I
>> >>> do not either expect that from Tapestry.
>> >>> I cannot make our results public because of regulatory issues. I will
>> try
>> >>> to setup a show case for that and will offer a patch. This will take
>> me a
>> >>> few days.
>> >>>
>> >>>  I don't think we are going to simply do away with the SoftReferences
>> >> without any replacements so I wouldn't even attempt at offering such a
>> >> patch. I just don't agree that a memory cache should be permanent
>> >> construct. If your object is not in a cache, you'll simply incur a
>> cache
>> >> miss and re-create the object on the fly. It is not typical that a
>> cache
>> >> will grow indefinitely. If you are adamant on this approach, you could
>> >> probably convince us to add a symbol to control the cache behavior
>> (i.e.
>> >> to
>> >> never purge objects from it). Guava has excellent, easily configurable
>> >> cache implementations.
>> >>
>> >> Kalle
>> >>
>> >>
>> >>  Robert
>> >>>
>> >>> Am 18.03.2015 um 18:19 schrieb Kalle Korhonen:
>> >>>
>> >>>   On Wed, Mar 18, 2015 at 12:44 AM, Robert Schmelzer
>> <rob...@schmelzer.cc
>> >>> >
>> >>>
>> >>>> wrote:
>> >>>>
>> >>>>   I do not agree with you on that  point. Tapestry is designed to
>> cache
>> >>>> the
>> >>>>
>> >>>>> page. When you do not have enough memory to hold your pages cached
>> >>>>> basically the system does not work as designed so you should fail
>> >>>>> early.
>> >>>>> Otherwise you possible defer the problem to production use. Fail
>> early
>> >>>>> means you should try to see the problem in the early stages on dev,
>> >>>>> where
>> >>>>> you try out all your pages. As I mentioned in my other post - you
>> would
>> >>>>> also not expect the EntityManager to work soft-refereences or spring
>> >>>>> application context to work soft referenced.
>> >>>>>
>> >>>>>
>> >>>>>   That's the definition of a memory cache - it trades memory for
>> better
>> >>>>>
>> >>>> performance. The primary use case for soft refences is for caching so
>> >>>> seems
>> >>>> to me it works exactly as designed. Your comparison to the
>> EntityManager
>> >>>> is
>> >>>> flawed since it's created per request. An EntityManager is designed
>> to
>> >>>> be
>> >>>> inexpensive to create. There are many areas that need improvements in
>> >>>> Tapestry but this is not one in my opinion. However, you seem to
>> >>>> strongly
>> >>>> think otherwise, so you probably have some data to back this up. Do
>> you
>> >>>> have a memory dump and trending cpu/memory charts of a sufficiently
>> >>>> large
>> >>>> system you can share with us to demonstrate the problem? Jvisualvm
>> >>>> snapshots should work fine. And furthermore - how would you like this
>> >>>> changed? If it's just adding a Page as a threadlocal, perhaps you can
>> >>>> just
>> >>>> write a patch for it.
>> >>>>
>> >>>> Kalle
>> >>>>
>> >>>>
>> >>>>   Am 18.03.2015 um 04:23 schrieb Kalle Korhonen:
>> >>>>
>> >>>>>    In my opinion, soft referencing page objects is highly
>> appropriate
>> >>>>> usage
>> >>>>>
>> >>>>>  here. If there's pressure on the available memory, it makes sense
>> to
>> >>>>>> trade
>> >>>>>> performance for memory instead of exiting with OoM. This is simple
>> >>>>>> condition to detect and should be visible with any reasonable
>> >>>>>> monitoring
>> >>>>>> tool. If you are hitting memory limits, you'll need to allocate
>> more
>> >>>>>> memory
>> >>>>>> for the application for optimal performance. Soft references are
>> >>>>>> especially
>> >>>>>> useful here because you can optimize its behavior with the
>> >>>>>> -client/-server
>> >>>>>> setting depending on your preferences.
>> >>>>>>
>> >>>>>> Kalle
>> >>>>>>
>> >>>>>> On Tue, Mar 17, 2015 at 4:26 PM, Howard Lewis Ship <
>> hls...@gmail.com>
>> >>>>>> wrote:
>> >>>>>>
>> >>>>>>    Possibly we need something more advanced; our own reference type
>> >>>>>> that
>> >>>>>> can
>> >>>>>>
>> >>>>>>  react to memory pressure by discarding pages that haven't been
>> used
>> >>>>>>> in
>> >>>>>>> configurable amount of time.
>> >>>>>>>
>> >>>>>>> Or perhaps we could just assume that any page that has been used
>> once
>> >>>>>>> need
>> >>>>>>> to be used in the future and get rid of the SoftReference entirely
>> >>>>>>> (or
>> >>>>>>> otherwise janitorize it in some way).
>> >>>>>>>
>> >>>>>>> On Tue, Mar 17, 2015 at 1:24 AM, Robert Schmelzer
>> >>>>>>> <rob...@schmelzer.cc
>> >>>>>>> wrote:
>> >>>>>>>
>> >>>>>>>    Hello,
>> >>>>>>>
>> >>>>>>>  I recently came accross the implementation of PageSourceImpl
>> where
>> >>>>>>>> PageImpl instances are softly refereneced into the pageCache:
>> >>>>>>>>
>> >>>>>>>> private final Map<CachedPageKey, SoftReference<Page>> pageCache =
>> >>>>>>>> CollectionFactory.newConcurrentMap();
>> >>>>>>>>
>> >>>>>>>> This implementation caused troubles, when you bring your system
>> into
>> >>>>>>>> memory preassure. The JVM will start to throw away the PageImpl
>> to
>> >>>>>>>> free
>> >>>>>>>>
>> >>>>>>>>   up
>> >>>>>>>>
>> >>>>>>>   memory - but during request processing he needs the PageImpl
>> again
>> >>>>>>> and
>> >>>>>>>
>> >>>>>>>> starts creating it again. So basically you end up loosing your
>> >>>>>>>> pageCache
>> >>>>>>>>
>> >>>>>>>>   at
>> >>>>>>>>
>> >>>>>>>   all and start creating the PageImpl instances on every request,
>> >>>>>>> which
>> >>>>>>>
>> >>>>>>>>   take
>> >>>>>>>>
>> >>>>>>>   way to much time and takes load onto the CPU. So basically you
>> are
>> >>>>>>>
>> >>>>>>>>   hiding a
>> >>>>>>>>
>> >>>>>>>   memory problem by making the system slow and raise CPU load.
>> >>>>>>>
>> >>>>>>>> I would suggest to use "normal" references for the PageCache or
>> at
>> >>>>>>>> least
>> >>>>>>>> only do SoftReferences only when not in production mode.
>> Otherwise
>> >>>>>>>> we
>> >>>>>>>> are
>> >>>>>>>> going to cover memory problems for too long.
>> >>>>>>>>
>> >>>>>>>> What do you think about that?
>> >>>>>>>>
>> >>>>>>>> Robert
>> >>>>>>>>
>> >>>>>>>> ------------------------------------------------------------
>> >>>>>>>> ---------
>> >>>>>>>> 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
>> >>>>>>> @hlship
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>   ------------------------------------------------------------
>> >>>>>>> ---------
>> >>>>>>>
>> >>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> ---------------------------------------------------------------------
>> >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> >>> For additional commands, e-mail: users-h...@tapestry.apache.org
>> >>>
>> >>>
>> >>>
>> >
>> > ---------------------------------------------------------------------
>> > 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
>> @hlship
>>
>
>

Reply via email to