Re: Memory consumption in T4.1.2 - Hard data

2007-09-01 Thread Patrick Moore
Hi Jesse --

Thanks for your work on Tapestry. I have noticed an issue around memory
usage with our automated tests which extensively use hivemind. I was
wondering if anyone has investigated hivemind memory leaks. I am going to do
some further investigating as time permits after Tuesday. That being said,
we have a publicly-accessible machine with the latest yourkit 7m2 release on
it that could be used to get long-running memory information.Contact me
off-list about getting access to the instance.This is our production machine
- but since we are still in beta we don't have many users (i.e. no one will
notice a little memory profiling).

I would suggest the Tapestry community pitch in a little to help gather data
to track down this issue - or determine it is a non-issue. One of open
source's advantages is the power of the many to solve issues like this. I
for one don't want to rely just on jesse to solve what sounds to be very
serious barrier to my own personal success.

-Pat Moore
Amplafi



On 8/28/07, Jesse Kuhnert [EMAIL PROTECTED] wrote:

 Umm yeah.   I have looked in to it as I just said.

 The only thing left is for me to look at this youkit snapshot profile
 and play from there but I'm not capable of debugging issues that
 aren't reported properly.

 On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
  Hi Jessie
 
  I'm gonna try update my version of ognl, if that won't work I will
  downgrade. I have not filed any bugs yet, but I sent a couple of emails
  to the list.  I don't get any exceptions during development, but that is
  because its not running for 3 or 4 days. I strongly suggest you consider
  looking into it, because I use the standard libraries provided by
  Tapestry through Maven.
 
  my configuration is as follows:
 
  JDK 6.01 32bit JVM (I have also tested on a 64 bit with no luck)
  Tomcat 5.5.20
  Debian Linux (2.6.15.28 kernel)
  Tapestry 4.1.2-SNAPSHOT with ognl 2.7
 
  regards,
  Peter
 
  Jesse Kuhnert wrote:
   I'd downgrade then if I were you.   Extensive profiling with yourkit
   hasn't shed any new light on whatever problems others are having.
   The OGNL classes indeed aren't being kept in the javassist pool from
   what I can tell.
  
   I have another yourkit snapshot binary to look at so we'll see what
 that says.
  
   I don't remember - have you filed any bug reports or reported any
   problems?  Are you getting ognl exceptions during development as well
   as production?  Do these errors sound like umpotential errors
   that should be looked at further?
  
   On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
  
   Hi Jessie
  
   Any progress on this?  sorry to bug you, but I have to take a
   decision soon, I have two production machines that will need to
 upgrade
   or downgrade Tapestry.
  
   Best wishes,
   Peter
  
   Jon Oakes wrote:
  
   Hi Bryan,
  
   I am a relative newbie but I was wondering if  you are running with
   caching enabled or disabled?  It might make sense to keep things
   around when caching is disabled whereas I think it would clearly be
 a
   bug to keep things around with it disabled.
  
   Jon Oakes
  
  
   Jesse Kuhnert wrote:
  
   Hmmm...well,  I don't think I like the sound of any of that.  I'm
 just
   going to pretend this problem doesn't exist.   (just kidding)
  
   I had thought I was doing something special with the ognl
 compilations
   that would cause its generated classes to not hang around
 afterwards
   in any pools.
  
   I'll take a look at things this weekend and am sure a fix will
 appear
   in between now and Monday - if there is a reasonable fix to be
 found.
   (in 4.1.3 snapshot form)
  
   On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:
 [EMAIL PROTECTED] wrote:
  
  
   I and another colleague of mine have been investigating what seems
 to be
   a memory leak in our Tapestry application for about a month
 since we
   upgraded to T4.1.2.  I won't bore you with the saga of the last
 month,
   but I would like to present the data I've gathered and look to the
 list
   for a proposed solution.  I was reading a recent thread in which
 Jesse
   said (08/09/2007):
  
  
  
   There is a map that grows as large as the system using it
 internally to
   javassist of various cached reflection info - but it doesn't leak
 in any
   way.
  
   This is precisely what I've found in profiling our application and
 it
   *appears* to be this map that is causing our applications to
 eventually
   run out of memory.
  
   The YourKit profiler shows me that, as time goes on, there is an
   instance of HiveMindClassPool  that grows and grows as class
 instances
   are created.  This class extends from javassist.ClassPool and is
 the map
   that Jesse is talking about in his quote above.  And he's right, I
   wouldn't say that the class pool leaks either because it looks
 like
   it's designed to retain that memory until the class pool itself is
 no
   longer needed.
  
  
  
   Take this quote from the 

RE: Memory consumption in T4.1.2 - Hard data

2007-08-29 Thread Marcus.Schulte
But that POM does use snapshots.
You shouldn't need the repository
http://people.apache.org/repo/m2-snapshot-repository
at all.
Probably, there are no very significant differences between the latest
4.1.2 snapshot and the release. But nevertheless, for a productive
environment, I'd always go with a released version.

 -Original Message-
 From: Peter Stavrinides [mailto:[EMAIL PROTECTED] 
 Sent: Wednesday, August 29, 2007 7:45 AM
 To: Tapestry users
 Subject: Re: Memory consumption in T4.1.2 - Hard data
 
 This is my POM:
 
 repositories
 repository
 releases
 updatePolicyalways/updatePolicy
 checksumPolicywarn/checksumPolicy
 /releases
 snapshots
 updatePolicyalways/updatePolicy
 checksumPolicyfail/checksumPolicy
 repository
 idapache.snapshots/id
 urlhttp://people.apache.org/repo/m2-snapshot-repository/url
 /repository
 /repositories
 
 dependency
 groupIdorg.apache.tapestry/groupId
 artifactIdtapestry-framework/artifactId
 version4.1.2-SNAPSHOT/version
 scopetest/scope
 /dependency
 dependency
 groupIdorg.apache.tapestry/groupId
 artifactIdtapestry-annotations/artifactId
 version4.1.2-SNAPSHOT/version
 scopetest/scope
 /dependency
 dependency
 groupIdorg.apache.tapestry/groupId
 artifactIdtapestry-contrib/artifactId
 version4.1.2-SNAPSHOT/version
 scopetest/scope
 /dependency
 dependency
 groupIdorg.apache.tapestry/groupId
 artifactIdtapestry-portlet/artifactId
 version4.1.2-SNAPSHOT/version
 scopetest/scope
 /dependency
 
 [EMAIL PROTECTED] wrote:
   

  my configuration is as follows:
 
  JDK 6.01 32bit JVM (I have also tested on a 64 bit with no
  luck) Tomcat 5.5.20 Debian Linux (2.6.15.28 kernel) Tapestry 
  4.1.2-SNAPSHOT with ognl 2.7
 
  
 
  Hi Peter, 4.1.2-SNAPSHOT is a typo, I suppose?
 

  regards,
  Peter
 
  Jesse Kuhnert wrote:
  
  I'd downgrade then if I were you.   Extensive profiling 
 with yourkit
  hasn't shed any new light on whatever problems others are having.
  The OGNL classes indeed aren't being kept in the javassist

  pool from
  
  what I can tell.
 
  I have another yourkit snapshot binary to look at so we'll

  see what that says.
  
  I don't remember - have you filed any bug reports or reported any 
  problems?  Are you getting ognl exceptions during

  development as well
  
  as production?  Do these errors sound like

  umpotential errors
  
  that should be looked at further?
 
  On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:


  Hi Jessie
 
  Any progress on this?  sorry to bug you, but I have 
 to take a 
  decision soon, I have two production machines that will need to 
  upgrade or downgrade Tapestry.
 
  Best wishes,
  Peter
 
  Jon Oakes wrote:
  
  
  Hi Bryan,
 
  I am a relative newbie but I was wondering if  you are

  running with
  
  caching enabled or disabled?  It might make sense to 
 keep things 
  around when caching is disabled whereas I think it would

  clearly be
  
  a bug to keep things around with it disabled.
 
  Jon Oakes
 
 
  Jesse Kuhnert wrote:


  Hmmm...well,  I don't think I like the sound of any of
  
  that.  I'm just
  
  going to pretend this problem doesn't exist.   (just kidding)
 
  I had thought I was doing something special with the ognl 
  compilations that would cause its generated classes to 
 not hang 
  around afterwards in any pools.
 
  I'll take a look at things this weekend and am sure a fix will 
  appear in between now and Monday - if there is a
  
  reasonable fix to be found.
  
  (in 4.1.3 snapshot form)
 
  On 8/24/07, Bryan Dotzour [EMAIL PROTECTED]
  
  mailto:[EMAIL PROTECTED] wrote:
  
  
  
  I and another colleague of mine have been investigating

  what seems
  
  to be a memory leak in our Tapestry application for about a 
  month since we upgraded to T4.1.2.  I won't bore you

  with the saga
  
  of the last month, but I would like to present the data I've 
  gathered and look to the list for a proposed solution.  I was 
  reading a recent thread in which Jesse said (08/09/2007):
 
 
 
  There is a map that grows as large as the system using it 
  internally to javassist of various cached reflection

  info - but it
  
  doesn't leak in any way.
 
  This is precisely what I've found in profiling our

  application and
  
  it
  *appears* to be this map that is causing our applications to 
  eventually run out of memory.
 
  The YourKit profiler shows me that, as time goes on,

  there is an
  
  instance of HiveMindClassPool  that grows and grows as class 
  instances are created.  This class extends from 
  javassist.ClassPool and is the map that Jesse is

  talking about in
  
  his quote above.  And he's right, I wouldn't say that 
 the class

Re: Memory consumption in T4.1.2 - Hard data

2007-08-29 Thread Peter Stavrinides
Correct me if I am wrong 4.1.2 is not released as yet, and not in the 
main repository, so how else would I get to it?


[EMAIL PROTECTED] wrote:

But that POM does use snapshots.
You shouldn't need the repository
http://people.apache.org/repo/m2-snapshot-repository
at all.
Probably, there are no very significant differences between the latest
4.1.2 snapshot and the release. But nevertheless, for a productive
environment, I'd always go with a released version.

  

-Original Message-
From: Peter Stavrinides [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, August 29, 2007 7:45 AM

To: Tapestry users
Subject: Re: Memory consumption in T4.1.2 - Hard data

This is my POM:

repositories
repository
releases
updatePolicyalways/updatePolicy
checksumPolicywarn/checksumPolicy
/releases
snapshots
updatePolicyalways/updatePolicy
checksumPolicyfail/checksumPolicy
repository
idapache.snapshots/id
urlhttp://people.apache.org/repo/m2-snapshot-repository/url
/repository
/repositories

dependency
groupIdorg.apache.tapestry/groupId
artifactIdtapestry-framework/artifactId
version4.1.2-SNAPSHOT/version
scopetest/scope
/dependency
dependency
groupIdorg.apache.tapestry/groupId
artifactIdtapestry-annotations/artifactId
version4.1.2-SNAPSHOT/version
scopetest/scope
/dependency
dependency
groupIdorg.apache.tapestry/groupId
artifactIdtapestry-contrib/artifactId
version4.1.2-SNAPSHOT/version
scopetest/scope
/dependency
dependency
groupIdorg.apache.tapestry/groupId
artifactIdtapestry-portlet/artifactId
version4.1.2-SNAPSHOT/version
scopetest/scope
/dependency

[EMAIL PROTECTED] wrote:

 
  
  

my configuration is as follows:

JDK 6.01 32bit JVM (I have also tested on a 64 bit with no
luck) Tomcat 5.5.20 Debian Linux (2.6.15.28 kernel) Tapestry 
4.1.2-SNAPSHOT with ognl 2.7





Hi Peter, 4.1.2-SNAPSHOT is a typo, I suppose?

  
  

regards,
Peter

Jesse Kuhnert wrote:


I'd downgrade then if I were you.   Extensive profiling 
  

with yourkit


hasn't shed any new light on whatever problems others are having.
The OGNL classes indeed aren't being kept in the javassist
  
  

pool from



what I can tell.

I have another yourkit snapshot binary to look at so we'll
  
  

see what that says.


I don't remember - have you filed any bug reports or reported any 
problems?  Are you getting ognl exceptions during
  
  

development as well



as production?  Do these errors sound like
  
  

umpotential errors



that should be looked at further?

On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
  
  
  

Hi Jessie

Any progress on this?  sorry to bug you, but I have 

to take a 

decision soon, I have two production machines that will need to 
upgrade or downgrade Tapestry.


Best wishes,
Peter

Jon Oakes wrote:




Hi Bryan,

I am a relative newbie but I was wondering if  you are
  
  

running with


caching enabled or disabled?  It might make sense to 
  
keep things 


around when caching is disabled whereas I think it would
  
  

clearly be



a bug to keep things around with it disabled.

Jon Oakes


Jesse Kuhnert wrote:
  
  
  

Hmmm...well,  I don't think I like the sound of any of



that.  I'm just



going to pretend this problem doesn't exist.   (just kidding)

I had thought I was doing something special with the ognl 
compilations that would cause its generated classes to 

not hang 


around afterwards in any pools.

I'll take a look at things this weekend and am sure a fix will 
appear in between now and Monday - if there is a



reasonable fix to be found.



(in 4.1.3 snapshot form)

On 8/24/07, Bryan Dotzour [EMAIL PROTECTED]



mailto:[EMAIL PROTECTED] wrote:






I and another colleague of mine have been investigating
  
  

what seems


to be a memory leak in our Tapestry application for about a 
month since we upgraded to T4.1.2.  I won't bore you
  
  

with the saga


of the last month, but I would like to present the data I've 
gathered and look to the list for a proposed solution.  I was 
reading a recent thread in which Jesse said (08/09/2007):




There is a map that grows as large as the system using it 
internally to javassist of various cached reflection
  
  

info - but it



doesn't leak in any way.

This is precisely what I've found in profiling our
  
  

application and



it
*appears* to be this map that is causing our applications to 
eventually run out

Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Andreas Andreou
Peter,
though not officially final (I believe),
http://news247.gr (tap-4.1.2) has been getting 40 req/day
for an uptime of 26 days with memory set to no more than 128MB.


On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:

 Hi Jessie

 Any progress on this?  sorry to bug you, but I have to take a
 decision soon, I have two production machines that will need to upgrade
 or downgrade Tapestry.

 Best wishes,
 Peter

 Jon Oakes wrote:
  Hi Bryan,
 
  I am a relative newbie but I was wondering if  you are running with
  caching enabled or disabled?  It might make sense to keep things
  around when caching is disabled whereas I think it would clearly be a
  bug to keep things around with it disabled.
 
  Jon Oakes
 
 
  Jesse Kuhnert wrote:
  Hmmm...well,  I don't think I like the sound of any of that.  I'm just
  going to pretend this problem doesn't exist.   (just kidding)
 
  I had thought I was doing something special with the ognl compilations
  that would cause its generated classes to not hang around afterwards
  in any pools.
 
  I'll take a look at things this weekend and am sure a fix will appear
  in between now and Monday - if there is a reasonable fix to be found.
  (in 4.1.3 snapshot form)
 
  On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:
 [EMAIL PROTECTED] wrote:
 
  I and another colleague of mine have been investigating what seems to
 be
  a memory leak in our Tapestry application for about a month since we
  upgraded to T4.1.2.  I won't bore you with the saga of the last month,
  but I would like to present the data I've gathered and look to the
 list
  for a proposed solution.  I was reading a recent thread in which Jesse
  said (08/09/2007):
 
 
 
  There is a map that grows as large as the system using it internally
 to
  javassist of various cached reflection info - but it doesn't leak in
 any
  way.
 
  This is precisely what I've found in profiling our application and it
  *appears* to be this map that is causing our applications to
 eventually
  run out of memory.
 
  The YourKit profiler shows me that, as time goes on, there is an
  instance of HiveMindClassPool  that grows and grows as class instances
  are created.  This class extends from javassist.ClassPool and is the
 map
  that Jesse is talking about in his quote above.  And he's right, I
  wouldn't say that the class pool leaks either because it looks like
  it's designed to retain that memory until the class pool itself is no
  longer needed.
 
 
 
  Take this quote from the javassist.ClassPool javadocs:
 
  Memory consumption memo:
  ClassPool objects hold all the CtClasses that have been created so
 that
  the consistency among modified classes can be guaranteed. Thus if a
  large number of CtClasses are processed, the ClassPool will consume a
  huge amount of memory. To avoid this, a ClassPool object should be
  recreated, for example, every hundred classes processed. Note that
  getDefault() is a singleton factory. Otherwise, detach() in CtClass
  should be used to avoid huge memory consumption. 
 
  This huge memory consumption by the ClassPool is what I was seeing. In
  particular it is the ClassPool that is held onto by OgnlRuntime.
  Inspecting this object in the profiler showed that it has a map
  containing about 45,000 classes.  All of the keys into this map were
  things like:  ASTTest_11494aca9af and ASTAnd_11494ace4fb and the
  values are instances of javassist.CtNewClass.  Each entry in this map
  looks like it retains about 1,900 bytes, for a grand total of about 90
  MB of memory used.
 
  These numbers came from my staging deployment where I had the profiler
  attached, using some reflection tricks I was able to look at a
  production site and found that it had about 240,000 items in that
 class
  pool.. approximately 450 MB of memory.
 
  So I guess the questions in my mind are:  Why are there so many
 classes
  in the pool?  Why does the number only ever go up?  Do those classes
  really need to stay in the pool forever?
 
 
 
 
 
 
 
 
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED] For
  additional commands, e-mail: [EMAIL PROTECTED]


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




-- 
Andreas Andreou - [EMAIL PROTECTED] - http://andyhot.di.uoa.gr
Tapestry / Tacos developer
Open Source / JEE Consulting


Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Peter Stavrinides


Andreas, give me a break! I am not trying to trash Tapestry if that's 
what you are thinking. I am not the only one experiencing these problems.
Have a look at some of my postings (and others posts) and you will see 
what I am talking about. I have been having these problems since 
upgrading from 4.1.1 I never experienced these problems before with 
uptime of months at a time.


Look at this log, id is an integer with the value 728:

21 Aug 2007 13:01:49,353 - INFO $Portfolio_89 - Setting the portfolio with the 
id: 728
21 Aug 2007 13:01:50,479 - ERROR $Error_118 - Unable to parse OGNL expression 
'id': Unable to parse OGNL expression 'id': Unable to parse OGNL expression 
'id': 
Exception [classpath:/org/apache/tapestry/form/TextArea.jwc, line 49, column 67]
at 
org.apache.tapestry.binding.ExpressionBinding.resolveExpression(ExpressionBinding.java:145)
at 
org.apache.tapestry.binding.ExpressionBinding.getObject(ExpressionBinding.java:125)

And then take a look at this:

21 Aug 2007 07:56:50,613 - ERROR 
org.apache.tapestry.services.impl.HiveMindExpressionCompiler - Error generating 
OGNL getter for expression exceptions with root [EMAIL PROTECTED]:Exception] 
and body:
{ return (($Exception_119)$2).getExceptions();}
org.apache.hivemind.ApplicationRuntimeException: Unable to add method 
java.lang.Object get(ognl.OgnlContext, java.lang.Object) to class 
$ASTProperty_1146a471a52: [source error] no such class: $Exception_119

This happening after 3-4 days of normal operation? Suddenly exceptions 
occur on random objects because OGNL can no longer compile them and this 
is because Tapestry can no longer find instances of these classes, it 
relates to JavaAssist dynamic class loading. Also, currently  the server 
is idle with no connections and JConsole shows 18000 classes loaded, 
yesterday there were 7000 classes, this number never goes down only up, 
so you tell me what's going on?


If Jessie can't explain it, then I have to go back a version we cant 
afford for clients to see broken pages, my boss doesn't care about the 
problem, he just wants a solution and its my job and reputation is at 
stake.



Andreas Andreou wrote:

Peter,
though not officially final (I believe),
http://news247.gr (tap-4.1.2) has been getting 40 req/day
for an uptime of 26 days with memory set to no more than 128MB.


On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
  

Hi Jessie

Any progress on this?  sorry to bug you, but I have to take a
decision soon, I have two production machines that will need to upgrade
or downgrade Tapestry.

Best wishes,
Peter

Jon Oakes wrote:


Hi Bryan,

I am a relative newbie but I was wondering if  you are running with
caching enabled or disabled?  It might make sense to keep things
around when caching is disabled whereas I think it would clearly be a
bug to keep things around with it disabled.

Jon Oakes


Jesse Kuhnert wrote:
  

Hmmm...well,  I don't think I like the sound of any of that.  I'm just
going to pretend this problem doesn't exist.   (just kidding)

I had thought I was doing something special with the ognl compilations
that would cause its generated classes to not hang around afterwards
in any pools.

I'll take a look at things this weekend and am sure a fix will appear
in between now and Monday - if there is a reasonable fix to be found.
(in 4.1.3 snapshot form)

On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:


[EMAIL PROTECTED] wrote:


I and another colleague of mine have been investigating what seems to
  

be


a memory leak in our Tapestry application for about a month since we
upgraded to T4.1.2.  I won't bore you with the saga of the last month,
but I would like to present the data I've gathered and look to the
  

list


for a proposed solution.  I was reading a recent thread in which Jesse
said (08/09/2007):



There is a map that grows as large as the system using it internally
  

to


javassist of various cached reflection info - but it doesn't leak in
  

any


way.

This is precisely what I've found in profiling our application and it
*appears* to be this map that is causing our applications to
  

eventually


run out of memory.

The YourKit profiler shows me that, as time goes on, there is an
instance of HiveMindClassPool  that grows and grows as class instances
are created.  This class extends from javassist.ClassPool and is the
  

map


that Jesse is talking about in his quote above.  And he's right, I
wouldn't say that the class pool leaks either because it looks like
it's designed to retain that memory until the class pool itself is no
longer needed.



Take this quote from the javassist.ClassPool javadocs:

Memory consumption memo:
ClassPool objects hold all the CtClasses that have been created so
  

that


the consistency among modified classes can be guaranteed. Thus if a
large number of CtClasses are 

Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Andreas Andreou
On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:


 Andreas, give me a break! I am not trying to trash Tapestry if that's
 what you are thinking. I am not the only one experiencing these problems.


Hey - i never meant that!

It's obvious from the reports that something's going on + Jesse was on to
it..
I just thought i'd offer a counter-example + throw in an example
of a T4.1.2 public site ( i'm not aware of a lot)


Have a look at some of my postings (and others posts) and you will see
 what I am talking about. I have been having these problems since
 upgrading from 4.1.1 I never experienced these problems before with
 uptime of months at a time.

 Look at this log, id is an integer with the value 728:

 21 Aug 2007 13:01:49,353 - INFO $Portfolio_89 - Setting the portfolio with
 the id: 728
 21 Aug 2007 13:01:50,479 - ERROR $Error_118 - Unable to parse OGNL
 expression 'id': Unable to parse OGNL expression 'id': Unable to parse OGNL
 expression 'id': 
 Exception [classpath:/org/apache/tapestry/form/TextArea.jwc, line 49,
 column 67]
 at org.apache.tapestry.binding.ExpressionBinding.resolveExpression
 (ExpressionBinding.java:145)
 at org.apache.tapestry.binding.ExpressionBinding.getObject(
 ExpressionBinding.java:125)

 And then take a look at this:

 21 Aug 2007 07:56:50,613 - ERROR
 org.apache.tapestry.services.impl.HiveMindExpressionCompiler - Error
 generating OGNL getter for expression exceptions with root
 [EMAIL PROTECTED]:Exception] and body:
 { return (($Exception_119)$2).getExceptions();}
 org.apache.hivemind.ApplicationRuntimeException: Unable to add method
 java.lang.Object get(ognl.OgnlContext, java.lang.Object) to class
 $ASTProperty_1146a471a52: [source error] no such class: $Exception_119

 This happening after 3-4 days of normal operation? Suddenly exceptions
 occur on random objects because OGNL can no longer compile them and this
 is because Tapestry can no longer find instances of these classes, it
 relates to JavaAssist dynamic class loading. Also, currently  the server
 is idle with no connections and JConsole shows 18000 classes loaded,
 yesterday there were 7000 classes, this number never goes down only up,
 so you tell me what's going on?

 If Jessie can't explain it, then I have to go back a version we cant
 afford for clients to see broken pages, my boss doesn't care about the
 problem, he just wants a solution and its my job and reputation is at
 stake.


 Andreas Andreou wrote:
  Peter,
  though not officially final (I believe),
  http://news247.gr (tap-4.1.2) has been getting 40 req/day
  for an uptime of 26 days with memory set to no more than 128MB.
 
 
  On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
 
  Hi Jessie
 
  Any progress on this?  sorry to bug you, but I have to take a
  decision soon, I have two production machines that will need to upgrade
  or downgrade Tapestry.
 
  Best wishes,
  Peter
 
  Jon Oakes wrote:
 
  Hi Bryan,
 
  I am a relative newbie but I was wondering if  you are running with
  caching enabled or disabled?  It might make sense to keep things
  around when caching is disabled whereas I think it would clearly be a
  bug to keep things around with it disabled.
 
  Jon Oakes
 
 
  Jesse Kuhnert wrote:
 
  Hmmm...well,  I don't think I like the sound of any of that.  I'm
 just
  going to pretend this problem doesn't exist.   (just kidding)
 
  I had thought I was doing something special with the ognl
 compilations
  that would cause its generated classes to not hang around afterwards
  in any pools.
 
  I'll take a look at things this weekend and am sure a fix will appear
  in between now and Monday - if there is a reasonable fix to be found.
  (in 4.1.3 snapshot form)
 
  On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:
 
  [EMAIL PROTECTED] wrote:
 
  I and another colleague of mine have been investigating what seems
 to
 
  be
 
  a memory leak in our Tapestry application for about a month since
 we
  upgraded to T4.1.2.  I won't bore you with the saga of the last
 month,
  but I would like to present the data I've gathered and look to the
 
  list
 
  for a proposed solution.  I was reading a recent thread in which
 Jesse
  said (08/09/2007):
 
 
 
  There is a map that grows as large as the system using it
 internally
 
  to
 
  javassist of various cached reflection info - but it doesn't leak in
 
  any
 
  way.
 
  This is precisely what I've found in profiling our application and
 it
  *appears* to be this map that is causing our applications to
 
  eventually
 
  run out of memory.
 
  The YourKit profiler shows me that, as time goes on, there is an
  instance of HiveMindClassPool  that grows and grows as class
 instances
  are created.  This class extends from javassist.ClassPool and is the
 
  map
 
  that Jesse is talking about in his quote above.  And he's right, I
  wouldn't say that the class pool leaks either because it looks
 like
  it's designed to retain that memory until the 

RE: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Marcus.Schulte
So changing the page pool parameters didn't help then? 

 -Original Message-
 From: Peter Stavrinides [mailto:[EMAIL PROTECTED] 
 Sent: Tuesday, August 28, 2007 10:34 AM
 To: Tapestry users
 Subject: Re: Memory consumption in T4.1.2 - Hard data
 
 
 Andreas, give me a break! I am not trying to trash Tapestry 
 if that's what you are thinking. I am not the only one 
 experiencing these problems.
 Have a look at some of my postings (and others posts) and you 
 will see what I am talking about. I have been having these 
 problems since upgrading from 4.1.1 I never experienced these 
 problems before with uptime of months at a time.
 
 Look at this log, id is an integer with the value 728:
 
 21 Aug 2007 13:01:49,353 - INFO $Portfolio_89 - Setting the 
 portfolio with the id: 728
 21 Aug 2007 13:01:50,479 - ERROR $Error_118 - Unable to parse 
 OGNL expression 'id': Unable to parse OGNL expression 'id': 
 Unable to parse OGNL expression 'id': 
 Exception [classpath:/org/apache/tapestry/form/TextArea.jwc, 
 line 49, column 67]
   at 
 org.apache.tapestry.binding.ExpressionBinding.resolveExpressio
 n(ExpressionBinding.java:145)
   at 
 org.apache.tapestry.binding.ExpressionBinding.getObject(Expres
 sionBinding.java:125)
 
 And then take a look at this:
 
 21 Aug 2007 07:56:50,613 - ERROR 
 org.apache.tapestry.services.impl.HiveMindExpressionCompiler 
 - Error generating OGNL getter for expression exceptions with 
 root [EMAIL PROTECTED]:Exception] and body:
 { return (($Exception_119)$2).getExceptions();}
 org.apache.hivemind.ApplicationRuntimeException: Unable to 
 add method java.lang.Object get(ognl.OgnlContext, 
 java.lang.Object) to class $ASTProperty_1146a471a52: [source 
 error] no such class: $Exception_119
 
 This happening after 3-4 days of normal operation? Suddenly 
 exceptions occur on random objects because OGNL can no longer 
 compile them and this is because Tapestry can no longer find 
 instances of these classes, it relates to JavaAssist dynamic 
 class loading. Also, currently  the server is idle with no 
 connections and JConsole shows 18000 classes loaded, 
 yesterday there were 7000 classes, this number never goes 
 down only up, so you tell me what's going on?
 
 If Jessie can't explain it, then I have to go back a version 
 we cant afford for clients to see broken pages, my boss 
 doesn't care about the problem, he just wants a solution and 
 its my job and reputation is at stake.
 
 
 Andreas Andreou wrote:
  Peter,
  though not officially final (I believe), http://news247.gr 
 (tap-4.1.2) 
  has been getting 40 req/day for an uptime of 26 days 
 with memory 
  set to no more than 128MB.
 
 
  On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:

  Hi Jessie
 
  Any progress on this?  sorry to bug you, but I have to take a 
  decision soon, I have two production machines that will need to 
  upgrade or downgrade Tapestry.
 
  Best wishes,
  Peter
 
  Jon Oakes wrote:
  
  Hi Bryan,
 
  I am a relative newbie but I was wondering if  you are 
 running with 
  caching enabled or disabled?  It might make sense to keep things 
  around when caching is disabled whereas I think it would 
 clearly be 
  a bug to keep things around with it disabled.
 
  Jon Oakes
 
 
  Jesse Kuhnert wrote:

  Hmmm...well,  I don't think I like the sound of any of 
 that.  I'm just
  going to pretend this problem doesn't exist.   (just kidding)
 
  I had thought I was doing something special with the ognl 
  compilations that would cause its generated classes to not hang 
  around afterwards in any pools.
 
  I'll take a look at things this weekend and am sure a fix will 
  appear in between now and Monday - if there is a 
 reasonable fix to be found.
  (in 4.1.3 snapshot form)
 
  On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:
  
  [EMAIL PROTECTED] wrote:
  
  I and another colleague of mine have been investigating 
 what seems 
  to

  be
  
  a memory leak in our Tapestry application for about a month 
  since we upgraded to T4.1.2.  I won't bore you with the saga of 
  the last month, but I would like to present the data 
 I've gathered 
  and look to the

  list
  
  for a proposed solution.  I was reading a recent thread 
 in which 
  Jesse said (08/09/2007):
 
 
 
  There is a map that grows as large as the system using it 
  internally

  to
  
  javassist of various cached reflection info - but it 
 doesn't leak 
  in

  any
  
  way.
 
  This is precisely what I've found in profiling our 
 application and 
  it
  *appears* to be this map that is causing our applications to

  eventually
  
  run out of memory.
 
  The YourKit profiler shows me that, as time goes on, 
 there is an 
  instance of HiveMindClassPool  that grows and grows as class 
  instances are created.  This class extends from 
  javassist.ClassPool and is the

  map

Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Kalle Korhonen
Now that's an OGNL compiler error. Have you tried with OGNL
2.7.1-SNAPSHOT(just use the latest). OGNL
2.7 that comes with Tap 4.1.2 by default is known to have bugs with the
compiled expressions. Please try with the latest OGNL; it might just do the
trick.

Kalle


On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:


 Andreas, give me a break! I am not trying to trash Tapestry if that's
 what you are thinking. I am not the only one experiencing these problems.
 Have a look at some of my postings (and others posts) and you will see
 what I am talking about. I have been having these problems since
 upgrading from 4.1.1 I never experienced these problems before with
 uptime of months at a time.

 Look at this log, id is an integer with the value 728:

 21 Aug 2007 13:01:49,353 - INFO $Portfolio_89 - Setting the portfolio with
 the id: 728
 21 Aug 2007 13:01:50,479 - ERROR $Error_118 - Unable to parse OGNL
 expression 'id': Unable to parse OGNL expression 'id': Unable to parse OGNL
 expression 'id': 
 Exception [classpath:/org/apache/tapestry/form/TextArea.jwc, line 49,
 column 67]
 at org.apache.tapestry.binding.ExpressionBinding.resolveExpression
 (ExpressionBinding.java:145)
 at org.apache.tapestry.binding.ExpressionBinding.getObject(
 ExpressionBinding.java:125)

 And then take a look at this:

 21 Aug 2007 07:56:50,613 - ERROR
 org.apache.tapestry.services.impl.HiveMindExpressionCompiler - Error
 generating OGNL getter for expression exceptions with root
 [EMAIL PROTECTED]:Exception] and body:
 { return (($Exception_119)$2).getExceptions();}
 org.apache.hivemind.ApplicationRuntimeException: Unable to add method
 java.lang.Object get(ognl.OgnlContext, java.lang.Object) to class
 $ASTProperty_1146a471a52: [source error] no such class: $Exception_119

 This happening after 3-4 days of normal operation? Suddenly exceptions
 occur on random objects because OGNL can no longer compile them and this
 is because Tapestry can no longer find instances of these classes, it
 relates to JavaAssist dynamic class loading. Also, currently  the server
 is idle with no connections and JConsole shows 18000 classes loaded,
 yesterday there were 7000 classes, this number never goes down only up,
 so you tell me what's going on?

 If Jessie can't explain it, then I have to go back a version we cant
 afford for clients to see broken pages, my boss doesn't care about the
 problem, he just wants a solution and its my job and reputation is at
 stake.


 Andreas Andreou wrote:
  Peter,
  though not officially final (I believe),
  http://news247.gr (tap-4.1.2) has been getting 40 req/day
  for an uptime of 26 days with memory set to no more than 128MB.
 
 
  On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
 
  Hi Jessie
 
  Any progress on this?  sorry to bug you, but I have to take a
  decision soon, I have two production machines that will need to upgrade
  or downgrade Tapestry.
 
  Best wishes,
  Peter
 
  Jon Oakes wrote:
 
  Hi Bryan,
 
  I am a relative newbie but I was wondering if  you are running with
  caching enabled or disabled?  It might make sense to keep things
  around when caching is disabled whereas I think it would clearly be a
  bug to keep things around with it disabled.
 
  Jon Oakes
 
 
  Jesse Kuhnert wrote:
 
  Hmmm...well,  I don't think I like the sound of any of that.  I'm
 just
  going to pretend this problem doesn't exist.   (just kidding)
 
  I had thought I was doing something special with the ognl
 compilations
  that would cause its generated classes to not hang around afterwards
  in any pools.
 
  I'll take a look at things this weekend and am sure a fix will appear
  in between now and Monday - if there is a reasonable fix to be found.
  (in 4.1.3 snapshot form)
 
  On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:
 
  [EMAIL PROTECTED] wrote:
 
  I and another colleague of mine have been investigating what seems
 to
 
  be
 
  a memory leak in our Tapestry application for about a month since
 we
  upgraded to T4.1.2.  I won't bore you with the saga of the last
 month,
  but I would like to present the data I've gathered and look to the
 
  list
 
  for a proposed solution.  I was reading a recent thread in which
 Jesse
  said (08/09/2007):
 
 
 
  There is a map that grows as large as the system using it
 internally
 
  to
 
  javassist of various cached reflection info - but it doesn't leak in
 
  any
 
  way.
 
  This is precisely what I've found in profiling our application and
 it
  *appears* to be this map that is causing our applications to
 
  eventually
 
  run out of memory.
 
  The YourKit profiler shows me that, as time goes on, there is an
  instance of HiveMindClassPool  that grows and grows as class
 instances
  are created.  This class extends from javassist.ClassPool and is the
 
  map
 
  that Jesse is talking about in his quote above.  And he's right, I
  wouldn't say that the class pool leaks either because it looks
 like
  it's 

Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Peter Stavrinides

No Marcus

[EMAIL PROTECTED] wrote:
So changing the page pool parameters didn't help then? 

  

-Original Message-
From: Peter Stavrinides [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, August 28, 2007 10:34 AM

To: Tapestry users
Subject: Re: Memory consumption in T4.1.2 - Hard data


Andreas, give me a break! I am not trying to trash Tapestry 
if that's what you are thinking. I am not the only one 
experiencing these problems.
Have a look at some of my postings (and others posts) and you 
will see what I am talking about. I have been having these 
problems since upgrading from 4.1.1 I never experienced these 
problems before with uptime of months at a time.


Look at this log, id is an integer with the value 728:

21 Aug 2007 13:01:49,353 - INFO $Portfolio_89 - Setting the 
portfolio with the id: 728
21 Aug 2007 13:01:50,479 - ERROR $Error_118 - Unable to parse 
OGNL expression 'id': Unable to parse OGNL expression 'id': 
Unable to parse OGNL expression 'id': 
Exception [classpath:/org/apache/tapestry/form/TextArea.jwc, 
line 49, column 67]
	at 
org.apache.tapestry.binding.ExpressionBinding.resolveExpressio

n(ExpressionBinding.java:145)
	at 
org.apache.tapestry.binding.ExpressionBinding.getObject(Expres

sionBinding.java:125)

And then take a look at this:

21 Aug 2007 07:56:50,613 - ERROR 
org.apache.tapestry.services.impl.HiveMindExpressionCompiler 
- Error generating OGNL getter for expression exceptions with 
root [EMAIL PROTECTED]:Exception] and body:

{ return (($Exception_119)$2).getExceptions();}
org.apache.hivemind.ApplicationRuntimeException: Unable to 
add method java.lang.Object get(ognl.OgnlContext, 
java.lang.Object) to class $ASTProperty_1146a471a52: [source 
error] no such class: $Exception_119


This happening after 3-4 days of normal operation? Suddenly 
exceptions occur on random objects because OGNL can no longer 
compile them and this is because Tapestry can no longer find 
instances of these classes, it relates to JavaAssist dynamic 
class loading. Also, currently  the server is idle with no 
connections and JConsole shows 18000 classes loaded, 
yesterday there were 7000 classes, this number never goes 
down only up, so you tell me what's going on?


If Jessie can't explain it, then I have to go back a version 
we cant afford for clients to see broken pages, my boss 
doesn't care about the problem, he just wants a solution and 
its my job and reputation is at stake.



Andreas Andreou wrote:


Peter,
though not officially final (I believe), http://news247.gr 
  
(tap-4.1.2) 

has been getting 40 req/day for an uptime of 26 days 
  
with memory 


set to no more than 128MB.


On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
  
  

Hi Jessie

Any progress on this?  sorry to bug you, but I have to take a 
decision soon, I have two production machines that will need to 
upgrade or downgrade Tapestry.


Best wishes,
Peter

Jon Oakes wrote:



Hi Bryan,

I am a relative newbie but I was wondering if  you are 
  
running with 

caching enabled or disabled?  It might make sense to keep things 
around when caching is disabled whereas I think it would 
  
clearly be 


a bug to keep things around with it disabled.

Jon Oakes


Jesse Kuhnert wrote:
  
  
Hmmm...well,  I don't think I like the sound of any of 


that.  I'm just


going to pretend this problem doesn't exist.   (just kidding)

I had thought I was doing something special with the ognl 
compilations that would cause its generated classes to not hang 
around afterwards in any pools.


I'll take a look at things this weekend and am sure a fix will 
appear in between now and Monday - if there is a 


reasonable fix to be found.


(in 4.1.3 snapshot form)

On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:



[EMAIL PROTECTED] wrote:


I and another colleague of mine have been investigating 
  
what seems 


to
  
  

be


a memory leak in our Tapestry application for about a month 
since we upgraded to T4.1.2.  I won't bore you with the saga of 
the last month, but I would like to present the data 
  
I've gathered 


and look to the
  
  

list


for a proposed solution.  I was reading a recent thread 
  
in which 


Jesse said (08/09/2007):



There is a map that grows as large as the system using it 
internally
  
  

to


javassist of various cached reflection info - but it 
  
doesn't leak 


in
  
  

any



way.

This is precisely what I've found in profiling our 
  
application and 


it
*appears* to be this map that is causing our applications to
  
  

eventually



run out of memory.

The YourKit profiler shows me

Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Peter Stavrinides

Hi Jessie

I'm gonna try update my version of ognl, if that won't work I will 
downgrade. I have not filed any bugs yet, but I sent a couple of emails 
to the list.  I don't get any exceptions during development, but that is 
because its not running for 3 or 4 days. I strongly suggest you consider 
looking into it, because I use the standard libraries provided by 
Tapestry through Maven.


my configuration is as follows:

JDK 6.01 32bit JVM (I have also tested on a 64 bit with no luck)
Tomcat 5.5.20
Debian Linux (2.6.15.28 kernel)
Tapestry 4.1.2-SNAPSHOT with ognl 2.7

regards,
Peter

Jesse Kuhnert wrote:

I'd downgrade then if I were you.   Extensive profiling with yourkit
hasn't shed any new light on whatever problems others are having.
The OGNL classes indeed aren't being kept in the javassist pool from
what I can tell.

I have another yourkit snapshot binary to look at so we'll see what that says.

I don't remember - have you filed any bug reports or reported any
problems?  Are you getting ognl exceptions during development as well
as production?  Do these errors sound like umpotential errors
that should be looked at further?

On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
  

Hi Jessie

Any progress on this?  sorry to bug you, but I have to take a
decision soon, I have two production machines that will need to upgrade
or downgrade Tapestry.

Best wishes,
Peter

Jon Oakes wrote:


Hi Bryan,

I am a relative newbie but I was wondering if  you are running with
caching enabled or disabled?  It might make sense to keep things
around when caching is disabled whereas I think it would clearly be a
bug to keep things around with it disabled.

Jon Oakes


Jesse Kuhnert wrote:
  

Hmmm...well,  I don't think I like the sound of any of that.  I'm just
going to pretend this problem doesn't exist.   (just kidding)

I had thought I was doing something special with the ognl compilations
that would cause its generated classes to not hang around afterwards
in any pools.

I'll take a look at things this weekend and am sure a fix will appear
in between now and Monday - if there is a reasonable fix to be found.
(in 4.1.3 snapshot form)

On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] wrote:



I and another colleague of mine have been investigating what seems to be
a memory leak in our Tapestry application for about a month since we
upgraded to T4.1.2.  I won't bore you with the saga of the last month,
but I would like to present the data I've gathered and look to the list
for a proposed solution.  I was reading a recent thread in which Jesse
said (08/09/2007):



There is a map that grows as large as the system using it internally to
javassist of various cached reflection info - but it doesn't leak in any
way.

This is precisely what I've found in profiling our application and it
*appears* to be this map that is causing our applications to eventually
run out of memory.

The YourKit profiler shows me that, as time goes on, there is an
instance of HiveMindClassPool  that grows and grows as class instances
are created.  This class extends from javassist.ClassPool and is the map
that Jesse is talking about in his quote above.  And he's right, I
wouldn't say that the class pool leaks either because it looks like
it's designed to retain that memory until the class pool itself is no
longer needed.



Take this quote from the javassist.ClassPool javadocs:

Memory consumption memo:
ClassPool objects hold all the CtClasses that have been created so that
the consistency among modified classes can be guaranteed. Thus if a
large number of CtClasses are processed, the ClassPool will consume a
huge amount of memory. To avoid this, a ClassPool object should be
recreated, for example, every hundred classes processed. Note that
getDefault() is a singleton factory. Otherwise, detach() in CtClass
should be used to avoid huge memory consumption. 

This huge memory consumption by the ClassPool is what I was seeing. In
particular it is the ClassPool that is held onto by OgnlRuntime.
Inspecting this object in the profiler showed that it has a map
containing about 45,000 classes.  All of the keys into this map were
things like:  ASTTest_11494aca9af and ASTAnd_11494ace4fb and the
values are instances of javassist.CtNewClass.  Each entry in this map
looks like it retains about 1,900 bytes, for a grand total of about 90
MB of memory used.

These numbers came from my staging deployment where I had the profiler
attached, using some reflection tricks I was able to look at a
production site and found that it had about 240,000 items in that class
pool.. approximately 450 MB of memory.

So I guess the questions in my mind are:  Why are there so many classes
in the pool?  Why does the number only ever go up?  Do those classes
really need to stay in the pool forever?







  

-
To unsubscribe, e-mail: [EMAIL PROTECTED] 

Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Jesse Kuhnert
Umm yeah.   I have looked in to it as I just said.

The only thing left is for me to look at this youkit snapshot profile
and play from there but I'm not capable of debugging issues that
aren't reported properly.

On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
 Hi Jessie

 I'm gonna try update my version of ognl, if that won't work I will
 downgrade. I have not filed any bugs yet, but I sent a couple of emails
 to the list.  I don't get any exceptions during development, but that is
 because its not running for 3 or 4 days. I strongly suggest you consider
 looking into it, because I use the standard libraries provided by
 Tapestry through Maven.

 my configuration is as follows:

 JDK 6.01 32bit JVM (I have also tested on a 64 bit with no luck)
 Tomcat 5.5.20
 Debian Linux (2.6.15.28 kernel)
 Tapestry 4.1.2-SNAPSHOT with ognl 2.7

 regards,
 Peter

 Jesse Kuhnert wrote:
  I'd downgrade then if I were you.   Extensive profiling with yourkit
  hasn't shed any new light on whatever problems others are having.
  The OGNL classes indeed aren't being kept in the javassist pool from
  what I can tell.
 
  I have another yourkit snapshot binary to look at so we'll see what that 
  says.
 
  I don't remember - have you filed any bug reports or reported any
  problems?  Are you getting ognl exceptions during development as well
  as production?  Do these errors sound like umpotential errors
  that should be looked at further?
 
  On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
 
  Hi Jessie
 
  Any progress on this?  sorry to bug you, but I have to take a
  decision soon, I have two production machines that will need to upgrade
  or downgrade Tapestry.
 
  Best wishes,
  Peter
 
  Jon Oakes wrote:
 
  Hi Bryan,
 
  I am a relative newbie but I was wondering if  you are running with
  caching enabled or disabled?  It might make sense to keep things
  around when caching is disabled whereas I think it would clearly be a
  bug to keep things around with it disabled.
 
  Jon Oakes
 
 
  Jesse Kuhnert wrote:
 
  Hmmm...well,  I don't think I like the sound of any of that.  I'm just
  going to pretend this problem doesn't exist.   (just kidding)
 
  I had thought I was doing something special with the ognl compilations
  that would cause its generated classes to not hang around afterwards
  in any pools.
 
  I'll take a look at things this weekend and am sure a fix will appear
  in between now and Monday - if there is a reasonable fix to be found.
  (in 4.1.3 snapshot form)
 
  On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] 
  wrote:
 
 
  I and another colleague of mine have been investigating what seems to be
  a memory leak in our Tapestry application for about a month since we
  upgraded to T4.1.2.  I won't bore you with the saga of the last month,
  but I would like to present the data I've gathered and look to the list
  for a proposed solution.  I was reading a recent thread in which Jesse
  said (08/09/2007):
 
 
 
  There is a map that grows as large as the system using it internally to
  javassist of various cached reflection info - but it doesn't leak in any
  way.
 
  This is precisely what I've found in profiling our application and it
  *appears* to be this map that is causing our applications to eventually
  run out of memory.
 
  The YourKit profiler shows me that, as time goes on, there is an
  instance of HiveMindClassPool  that grows and grows as class instances
  are created.  This class extends from javassist.ClassPool and is the map
  that Jesse is talking about in his quote above.  And he's right, I
  wouldn't say that the class pool leaks either because it looks like
  it's designed to retain that memory until the class pool itself is no
  longer needed.
 
 
 
  Take this quote from the javassist.ClassPool javadocs:
 
  Memory consumption memo:
  ClassPool objects hold all the CtClasses that have been created so that
  the consistency among modified classes can be guaranteed. Thus if a
  large number of CtClasses are processed, the ClassPool will consume a
  huge amount of memory. To avoid this, a ClassPool object should be
  recreated, for example, every hundred classes processed. Note that
  getDefault() is a singleton factory. Otherwise, detach() in CtClass
  should be used to avoid huge memory consumption. 
 
  This huge memory consumption by the ClassPool is what I was seeing. In
  particular it is the ClassPool that is held onto by OgnlRuntime.
  Inspecting this object in the profiler showed that it has a map
  containing about 45,000 classes.  All of the keys into this map were
  things like:  ASTTest_11494aca9af and ASTAnd_11494ace4fb and the
  values are instances of javassist.CtNewClass.  Each entry in this map
  looks like it retains about 1,900 bytes, for a grand total of about 90
  MB of memory used.
 
  These numbers came from my staging deployment where I had the profiler
  attached, using some reflection tricks I was able to look at 

RE: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Marcus.Schulte
 
 my configuration is as follows:
 
 JDK 6.01 32bit JVM (I have also tested on a 64 bit with no 
 luck) Tomcat 5.5.20 Debian Linux (2.6.15.28 kernel) Tapestry 
 4.1.2-SNAPSHOT with ognl 2.7
 

Hi Peter, 4.1.2-SNAPSHOT is a typo, I suppose?

 regards,
 Peter
 
 Jesse Kuhnert wrote:
  I'd downgrade then if I were you.   Extensive profiling with yourkit
  hasn't shed any new light on whatever problems others are having.
  The OGNL classes indeed aren't being kept in the javassist 
 pool from 
  what I can tell.
 
  I have another yourkit snapshot binary to look at so we'll 
 see what that says.
 
  I don't remember - have you filed any bug reports or reported any 
  problems?  Are you getting ognl exceptions during 
 development as well 
  as production?  Do these errors sound like 
 umpotential errors 
  that should be looked at further?
 
  On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:

  Hi Jessie
 
  Any progress on this?  sorry to bug you, but I have to take a 
  decision soon, I have two production machines that will need to 
  upgrade or downgrade Tapestry.
 
  Best wishes,
  Peter
 
  Jon Oakes wrote:
  
  Hi Bryan,
 
  I am a relative newbie but I was wondering if  you are 
 running with 
  caching enabled or disabled?  It might make sense to keep things 
  around when caching is disabled whereas I think it would 
 clearly be 
  a bug to keep things around with it disabled.
 
  Jon Oakes
 
 
  Jesse Kuhnert wrote:

  Hmmm...well,  I don't think I like the sound of any of 
 that.  I'm just
  going to pretend this problem doesn't exist.   (just kidding)
 
  I had thought I was doing something special with the ognl 
  compilations that would cause its generated classes to not hang 
  around afterwards in any pools.
 
  I'll take a look at things this weekend and am sure a fix will 
  appear in between now and Monday - if there is a 
 reasonable fix to be found.
  (in 4.1.3 snapshot form)
 
  On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] 
 mailto:[EMAIL PROTECTED] wrote:
 
  
  I and another colleague of mine have been investigating 
 what seems 
  to be a memory leak in our Tapestry application for about a 
  month since we upgraded to T4.1.2.  I won't bore you 
 with the saga 
  of the last month, but I would like to present the data I've 
  gathered and look to the list for a proposed solution.  I was 
  reading a recent thread in which Jesse said (08/09/2007):
 
 
 
  There is a map that grows as large as the system using it 
  internally to javassist of various cached reflection 
 info - but it 
  doesn't leak in any way.
 
  This is precisely what I've found in profiling our 
 application and 
  it
  *appears* to be this map that is causing our applications to 
  eventually run out of memory.
 
  The YourKit profiler shows me that, as time goes on, 
 there is an 
  instance of HiveMindClassPool  that grows and grows as class 
  instances are created.  This class extends from 
  javassist.ClassPool and is the map that Jesse is 
 talking about in 
  his quote above.  And he's right, I wouldn't say that the class 
  pool leaks either because it looks like it's designed 
 to retain 
  that memory until the class pool itself is no longer needed.
 
 
 
  Take this quote from the javassist.ClassPool javadocs:
 
  Memory consumption memo:
  ClassPool objects hold all the CtClasses that have been 
 created so 
  that the consistency among modified classes can be guaranteed. 
  Thus if a large number of CtClasses are processed, the 
 ClassPool 
  will consume a huge amount of memory. To avoid this, a 
 ClassPool 
  object should be recreated, for example, every hundred classes 
  processed. Note that
  getDefault() is a singleton factory. Otherwise, detach() in 
  CtClass should be used to avoid huge memory consumption. 
 
  This huge memory consumption by the ClassPool is what I was 
  seeing. In particular it is the ClassPool that is held 
 onto by OgnlRuntime.
  Inspecting this object in the profiler showed that it has a map 
  containing about 45,000 classes.  All of the keys into this map 
  were things like:  ASTTest_11494aca9af and 
 ASTAnd_11494ace4fb 
  and the values are instances of javassist.CtNewClass.  
 Each entry 
  in this map looks like it retains about 1,900 bytes, 
 for a grand 
  total of about 90 MB of memory used.
 
  These numbers came from my staging deployment where I had the 
  profiler attached, using some reflection tricks I was 
 able to look 
  at a production site and found that it had about 
 240,000 items in 
  that class pool.. approximately 450 MB of memory.
 
  So I guess the questions in my mind are:  Why are there so many 
  classes in the pool?  Why does the number only ever go up?  Do 
  those classes really need to stay in the pool forever?
 
 
 
 
 
 
 

  
 
  - To unsubscribe, e-mail: 
 [EMAIL PROTECTED] For 
  additional commands, e-mail: 

Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Peter Stavrinides

Yes
[EMAIL PROTECTED] wrote:
 
  

my configuration is as follows:

JDK 6.01 32bit JVM (I have also tested on a 64 bit with no 
luck) Tomcat 5.5.20 Debian Linux (2.6.15.28 kernel) Tapestry 
4.1.2-SNAPSHOT with ognl 2.7





Hi Peter, 4.1.2-SNAPSHOT is a typo, I suppose?

  

regards,
Peter

Jesse Kuhnert wrote:


I'd downgrade then if I were you.   Extensive profiling with yourkit
hasn't shed any new light on whatever problems others are having.
The OGNL classes indeed aren't being kept in the javassist 
  
pool from 


what I can tell.

I have another yourkit snapshot binary to look at so we'll 
  

see what that says.

I don't remember - have you filed any bug reports or reported any 
problems?  Are you getting ognl exceptions during 
  
development as well 

as production?  Do these errors sound like 
  
umpotential errors 


that should be looked at further?

On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
  
  

Hi Jessie

Any progress on this?  sorry to bug you, but I have to take a 
decision soon, I have two production machines that will need to 
upgrade or downgrade Tapestry.


Best wishes,
Peter

Jon Oakes wrote:



Hi Bryan,

I am a relative newbie but I was wondering if  you are 
  
running with 

caching enabled or disabled?  It might make sense to keep things 
around when caching is disabled whereas I think it would 
  
clearly be 


a bug to keep things around with it disabled.

Jon Oakes


Jesse Kuhnert wrote:
  
  
Hmmm...well,  I don't think I like the sound of any of 


that.  I'm just


going to pretend this problem doesn't exist.   (just kidding)

I had thought I was doing something special with the ognl 
compilations that would cause its generated classes to not hang 
around afterwards in any pools.


I'll take a look at things this weekend and am sure a fix will 
appear in between now and Monday - if there is a 


reasonable fix to be found.


(in 4.1.3 snapshot form)

On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] 


mailto:[EMAIL PROTECTED] wrote:



I and another colleague of mine have been investigating 
  
what seems 

to be a memory leak in our Tapestry application for about a 
month since we upgraded to T4.1.2.  I won't bore you 
  
with the saga 

of the last month, but I would like to present the data I've 
gathered and look to the list for a proposed solution.  I was 
reading a recent thread in which Jesse said (08/09/2007):




There is a map that grows as large as the system using it 
internally to javassist of various cached reflection 
  
info - but it 


doesn't leak in any way.

This is precisely what I've found in profiling our 
  
application and 


it
*appears* to be this map that is causing our applications to 
eventually run out of memory.


The YourKit profiler shows me that, as time goes on, 
  
there is an 

instance of HiveMindClassPool  that grows and grows as class 
instances are created.  This class extends from 
javassist.ClassPool and is the map that Jesse is 
  
talking about in 

his quote above.  And he's right, I wouldn't say that the class 
pool leaks either because it looks like it's designed 
  
to retain 


that memory until the class pool itself is no longer needed.



Take this quote from the javassist.ClassPool javadocs:

Memory consumption memo:
ClassPool objects hold all the CtClasses that have been 
  
created so 

that the consistency among modified classes can be guaranteed. 
Thus if a large number of CtClasses are processed, the 
  
ClassPool 

will consume a huge amount of memory. To avoid this, a 
  
ClassPool 

object should be recreated, for example, every hundred classes 
processed. Note that
getDefault() is a singleton factory. Otherwise, detach() in 
CtClass should be used to avoid huge memory consumption. 


This huge memory consumption by the ClassPool is what I was 
seeing. In particular it is the ClassPool that is held 
  

onto by OgnlRuntime.

Inspecting this object in the profiler showed that it has a map 
containing about 45,000 classes.  All of the keys into this map 
were things like:  ASTTest_11494aca9af and 
  
ASTAnd_11494ace4fb 

and the values are instances of javassist.CtNewClass.  
  
Each entry 

in this map looks like it retains about 1,900 bytes, 
  
for a grand 


total of about 90 MB of memory used.

These numbers came from my staging deployment where I had the 
profiler attached, using some reflection tricks I was 
  
able to look 

at a production site and found that it had about 
  
240,000 items in 


that class pool.. approximately 450 MB of memory.

So I guess the questions in 

Re: Memory consumption in T4.1.2 - Hard data

2007-08-28 Thread Peter Stavrinides

This is my POM:

repositories
repository
releases
updatePolicyalways/updatePolicy
checksumPolicywarn/checksumPolicy
/releases
snapshots
updatePolicyalways/updatePolicy
checksumPolicyfail/checksumPolicy
repository
idapache.snapshots/id
urlhttp://people.apache.org/repo/m2-snapshot-repository/url
/repository
/repositories

dependency
groupIdorg.apache.tapestry/groupId
artifactIdtapestry-framework/artifactId
version4.1.2-SNAPSHOT/version
scopetest/scope
/dependency
dependency
groupIdorg.apache.tapestry/groupId
artifactIdtapestry-annotations/artifactId
version4.1.2-SNAPSHOT/version
scopetest/scope
/dependency
dependency
groupIdorg.apache.tapestry/groupId
artifactIdtapestry-contrib/artifactId
version4.1.2-SNAPSHOT/version
scopetest/scope
/dependency
dependency
groupIdorg.apache.tapestry/groupId
artifactIdtapestry-portlet/artifactId
version4.1.2-SNAPSHOT/version
scopetest/scope
/dependency

[EMAIL PROTECTED] wrote:
 
  

my configuration is as follows:

JDK 6.01 32bit JVM (I have also tested on a 64 bit with no 
luck) Tomcat 5.5.20 Debian Linux (2.6.15.28 kernel) Tapestry 
4.1.2-SNAPSHOT with ognl 2.7





Hi Peter, 4.1.2-SNAPSHOT is a typo, I suppose?

  

regards,
Peter

Jesse Kuhnert wrote:


I'd downgrade then if I were you.   Extensive profiling with yourkit
hasn't shed any new light on whatever problems others are having.
The OGNL classes indeed aren't being kept in the javassist 
  
pool from 


what I can tell.

I have another yourkit snapshot binary to look at so we'll 
  

see what that says.

I don't remember - have you filed any bug reports or reported any 
problems?  Are you getting ognl exceptions during 
  
development as well 

as production?  Do these errors sound like 
  
umpotential errors 


that should be looked at further?

On 8/28/07, Peter Stavrinides [EMAIL PROTECTED] wrote:
  
  

Hi Jessie

Any progress on this?  sorry to bug you, but I have to take a 
decision soon, I have two production machines that will need to 
upgrade or downgrade Tapestry.


Best wishes,
Peter

Jon Oakes wrote:



Hi Bryan,

I am a relative newbie but I was wondering if  you are 
  
running with 

caching enabled or disabled?  It might make sense to keep things 
around when caching is disabled whereas I think it would 
  
clearly be 


a bug to keep things around with it disabled.

Jon Oakes


Jesse Kuhnert wrote:
  
  
Hmmm...well,  I don't think I like the sound of any of 


that.  I'm just


going to pretend this problem doesn't exist.   (just kidding)

I had thought I was doing something special with the ognl 
compilations that would cause its generated classes to not hang 
around afterwards in any pools.


I'll take a look at things this weekend and am sure a fix will 
appear in between now and Monday - if there is a 


reasonable fix to be found.


(in 4.1.3 snapshot form)

On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] 


mailto:[EMAIL PROTECTED] wrote:



I and another colleague of mine have been investigating 
  
what seems 

to be a memory leak in our Tapestry application for about a 
month since we upgraded to T4.1.2.  I won't bore you 
  
with the saga 

of the last month, but I would like to present the data I've 
gathered and look to the list for a proposed solution.  I was 
reading a recent thread in which Jesse said (08/09/2007):




There is a map that grows as large as the system using it 
internally to javassist of various cached reflection 
  
info - but it 


doesn't leak in any way.

This is precisely what I've found in profiling our 
  
application and 


it
*appears* to be this map that is causing our applications to 
eventually run out of memory.


The YourKit profiler shows me that, as time goes on, 
  
there is an 

instance of HiveMindClassPool  that grows and grows as class 
instances are created.  This class extends from 
javassist.ClassPool and is the map that Jesse is 
  
talking about in 

his quote above.  And he's right, I wouldn't say that the class 
pool leaks either because it looks like it's designed 
  
to retain 


that memory until the class pool itself is no longer needed.



Take this quote from the javassist.ClassPool javadocs:

Memory consumption memo:
ClassPool objects hold all the CtClasses that have been 
  
created so 

that the consistency among modified classes can be guaranteed. 
Thus if a large number of CtClasses are processed, the 
  
ClassPool 

will consume a huge amount of memory. To avoid this, a 
  
ClassPool 

object should be recreated, for example, every hundred classes 
processed. Note that
getDefault() is a singleton factory. Otherwise, detach() in 
CtClass should be used to avoid huge memory consumption. 


This huge 

Re: Memory consumption in T4.1.2 - Hard data

2007-08-27 Thread Peter Stavrinides

Hi Jessie

Any progress on this?  sorry to bug you, but I have to take a 
decision soon, I have two production machines that will need to upgrade 
or downgrade Tapestry.


Best wishes,
Peter

Jon Oakes wrote:

Hi Bryan,

I am a relative newbie but I was wondering if  you are running with 
caching enabled or disabled?  It might make sense to keep things 
around when caching is disabled whereas I think it would clearly be a 
bug to keep things around with it disabled.


Jon Oakes


Jesse Kuhnert wrote:

Hmmm...well,  I don't think I like the sound of any of that.  I'm just
going to pretend this problem doesn't exist.   (just kidding)

I had thought I was doing something special with the ognl compilations
that would cause its generated classes to not hang around afterwards
in any pools.

I'll take a look at things this weekend and am sure a fix will appear
in between now and Monday - if there is a reasonable fix to be found.
(in 4.1.3 snapshot form)

On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] wrote:
  

I and another colleague of mine have been investigating what seems to be
a memory leak in our Tapestry application for about a month since we
upgraded to T4.1.2.  I won't bore you with the saga of the last month,
but I would like to present the data I've gathered and look to the list
for a proposed solution.  I was reading a recent thread in which Jesse
said (08/09/2007):



There is a map that grows as large as the system using it internally to
javassist of various cached reflection info - but it doesn't leak in any
way.

This is precisely what I've found in profiling our application and it
*appears* to be this map that is causing our applications to eventually
run out of memory.

The YourKit profiler shows me that, as time goes on, there is an
instance of HiveMindClassPool  that grows and grows as class instances
are created.  This class extends from javassist.ClassPool and is the map
that Jesse is talking about in his quote above.  And he's right, I
wouldn't say that the class pool leaks either because it looks like
it's designed to retain that memory until the class pool itself is no
longer needed.



Take this quote from the javassist.ClassPool javadocs:

Memory consumption memo:
ClassPool objects hold all the CtClasses that have been created so that
the consistency among modified classes can be guaranteed. Thus if a
large number of CtClasses are processed, the ClassPool will consume a
huge amount of memory. To avoid this, a ClassPool object should be
recreated, for example, every hundred classes processed. Note that
getDefault() is a singleton factory. Otherwise, detach() in CtClass
should be used to avoid huge memory consumption. 

This huge memory consumption by the ClassPool is what I was seeing. In
particular it is the ClassPool that is held onto by OgnlRuntime.
Inspecting this object in the profiler showed that it has a map
containing about 45,000 classes.  All of the keys into this map were
things like:  ASTTest_11494aca9af and ASTAnd_11494ace4fb and the
values are instances of javassist.CtNewClass.  Each entry in this map
looks like it retains about 1,900 bytes, for a grand total of about 90
MB of memory used.

These numbers came from my staging deployment where I had the profiler
attached, using some reflection tricks I was able to look at a
production site and found that it had about 240,000 items in that class
pool.. approximately 450 MB of memory.

So I guess the questions in my mind are:  Why are there so many classes
in the pool?  Why does the number only ever go up?  Do those classes
really need to stay in the pool forever?







  


- 
To unsubscribe, e-mail: [EMAIL PROTECTED] For 
additional commands, e-mail: [EMAIL PROTECTED] 



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Memory consumption in T4.1.2 - Hard data

2007-08-24 Thread Jesse Kuhnert
Hmmm...well,  I don't think I like the sound of any of that.  I'm just
going to pretend this problem doesn't exist.   (just kidding)

I had thought I was doing something special with the ognl compilations
that would cause its generated classes to not hang around afterwards
in any pools.

I'll take a look at things this weekend and am sure a fix will appear
in between now and Monday - if there is a reasonable fix to be found.
(in 4.1.3 snapshot form)

On 8/24/07, Bryan Dotzour [EMAIL PROTECTED] wrote:
 I and another colleague of mine have been investigating what seems to be
 a memory leak in our Tapestry application for about a month since we
 upgraded to T4.1.2.  I won't bore you with the saga of the last month,
 but I would like to present the data I've gathered and look to the list
 for a proposed solution.  I was reading a recent thread in which Jesse
 said (08/09/2007):



 There is a map that grows as large as the system using it internally to
 javassist of various cached reflection info - but it doesn't leak in any
 way.

 This is precisely what I've found in profiling our application and it
 *appears* to be this map that is causing our applications to eventually
 run out of memory.

 The YourKit profiler shows me that, as time goes on, there is an
 instance of HiveMindClassPool  that grows and grows as class instances
 are created.  This class extends from javassist.ClassPool and is the map
 that Jesse is talking about in his quote above.  And he's right, I
 wouldn't say that the class pool leaks either because it looks like
 it's designed to retain that memory until the class pool itself is no
 longer needed.



 Take this quote from the javassist.ClassPool javadocs:

 Memory consumption memo:
 ClassPool objects hold all the CtClasses that have been created so that
 the consistency among modified classes can be guaranteed. Thus if a
 large number of CtClasses are processed, the ClassPool will consume a
 huge amount of memory. To avoid this, a ClassPool object should be
 recreated, for example, every hundred classes processed. Note that
 getDefault() is a singleton factory. Otherwise, detach() in CtClass
 should be used to avoid huge memory consumption. 

 This huge memory consumption by the ClassPool is what I was seeing. In
 particular it is the ClassPool that is held onto by OgnlRuntime.
 Inspecting this object in the profiler showed that it has a map
 containing about 45,000 classes.  All of the keys into this map were
 things like:  ASTTest_11494aca9af and ASTAnd_11494ace4fb and the
 values are instances of javassist.CtNewClass.  Each entry in this map
 looks like it retains about 1,900 bytes, for a grand total of about 90
 MB of memory used.

 These numbers came from my staging deployment where I had the profiler
 attached, using some reflection tricks I was able to look at a
 production site and found that it had about 240,000 items in that class
 pool.. approximately 450 MB of memory.

 So I guess the questions in my mind are:  Why are there so many classes
 in the pool?  Why does the number only ever go up?  Do those classes
 really need to stay in the pool forever?








-- 
Jesse Kuhnert
Tapestry/Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]