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