Hi,

I do not have the T5 source checked out / buildable - so thats not a very easy task for me. I will see if I find time for that.

Our app is not particular lightweight - more a J2EE monster style app - 650 entities, over 2500 spring beans.... The pages we are initializing in Tapestray are consuming several hundred MB of RAM holding thousends of components -> this make this issue so visible to us. I understand that 99% of Tapestry Apps will not face that problem.

I would guess following behaviour with "normal" references:
Test case 1 (2GB): same as before
Test case 2 (1.4GB): not sure about that - maybe GC overhead warning
Test case 3 (1.2GB): OutOfMemory

Robert

Am 02.04.2015 um 03:11 schrieb Kalle Korhonen:
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




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to