Hey Ben,
I think there is leak even tag pooling is disabled. I am using the
current version of tomcat and disabled tag pooling. Did some other
modifications too so here is the sum:
CATALINA_OPTS='-Djava.awt.headless=true -Dserver.info=IIS -server
-Xmx100M -Xms80M -XX:MaxPermSize=60M -XX:PermSize=30M'

#MemoryLeakPrecausions
CATALINA_OPTS="$CATALINA_OPTS
-Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true
-Dorg.apache.jasper.runtime.JspFactoryImpl.USE_POOL=false
-Dorg.apache.jasper.runtime.JspFactoryImpl.POOL_SIZE=0"

#GarbageCollectionTuning
CATALINA_OPTS="$CATALINA_OPTS -XX:+CMSClassUnloadingEnabled
-XX:-UseGCOverheadLimit"

If I am not using stripes layout tag the app isn't leaking. If I am
using the layout tag the app starts leaking. That's why I suspect the
layout tag to be the guilty guy in this thriller :-)

I still have the heap dump available but its around 80mb big... say a
word if you need it. Thats why I only send the report including the
results of shortest path to gc analysis:
One instance of "org.apache.jasper.servlet.JspServlet" loaded by
"org.apache.catalina.loader.StandardClassLoader @ 0x7f44d9b865c0"
occupies 76.998.232 (89,65%) bytes. The memory is accumulated in one
instance of "org.apache.jsp.WEB_002dINF.jsp_002dlayouts.app.MainLayoutApp_jsp"
loaded by "JSPs of null".Keywords
org.apache.jsp.WEB_002dINF.jsp_002dlayouts.app.MainLayoutApp_jsp
JSPs of null
org.apache.catalina.loader.StandardClassLoader @ 0x7f44d9b865c0
org.apache.jasper.servlet.JspServlet


 Shortest Paths To the Accumulation Point
Class Name Shallow Heap Retained Heap
org.apache.jsp.WEB_002dINF.jsp_002dlayouts.app.MainLayoutApp_jsp @
0x7f44da16f020 80 76.961.568
theServlet org.apache.jasper.servlet.JspServletWrapper @
0x7f44da16f0a0 120 76.963.208
value java.util.concurrent.ConcurrentHashMap$HashEntry @
0x7f44da174660 48 76.963.256
[0] java.util.concurrent.ConcurrentHashMap$HashEntry[1] @
0x7f44d9f83a40 32 76.963.288
table java.util.concurrent.ConcurrentHashMap$Segment @ 0x7f44d9f839e0
48 76.963.384
[4] java.util.concurrent.ConcurrentHashMap$Segment[16] @
0x7f44d9f833c8 152 76.983.992
segments java.util.concurrent.ConcurrentHashMap @ 0x7f44d9f83380 72 76.984.088
jsps org.apache.jasper.compiler.JspRuntimeContext @ 0x7f44d9f832d8 96
76.996.968
rctxt org.apache.jasper.servlet.JspServlet @ 0x7f44d9f82d68 64 76.998.232
resource org.apache.tomcat.util.modeler.BaseModelMBean @
0x7f44d9d3c978 64 1.088
object com.sun.jmx.mbeanserver.NamedObject @ 0x7f44d9d3c958 32 32
value java.util.HashMap$Entry @ 0x7f44d9d3c900 48 120
[43] java.util.HashMap$Entry[128] @ 0x7f44d9d07340 1.048 8.288
table java.util.HashMap @ 0x7f44d9bbc4f0 64 8.376
value java.util.HashMap$Entry @ 0x7f44d9bbc4c0 48 8.504
[4] java.util.HashMap$Entry[16] @ 0x7f44d9be1220 152 21.872
table java.util.HashMap @ 0x7f44d9b99508 64 21.984
domainTb com.sun.jmx.mbeanserver.Repository @ 0x7f44d9b994e0 40 22.024
repository com.sun.jmx.interceptor.DefaultMBeanServerInterceptor @
0x7f44d9b99070 80 113.672
mbsInterceptor com.sun.jmx.mbeanserver.JmxMBeanServer @ 0x7f44d9b86428
64 115.080
platformMBeanServer class java.lang.management.ManagementFactory @
0x7f44d60ea788 System Class 88 584
[0] java.lang.Object[10] @ 0x7f44d99b96e0 » 104 104
mserver org.apache.catalina.core.StandardEngine @ 0x7f44d9bd8170 » 256 1.264
Total: 3 entries
instance org.apache.catalina.core.StandardWrapper @ 0x7f44d9c27720 » 376 2.640
Total: 2 entries

 Accumulated Objects
Class Name Shallow Heap Retained Heap Percentage
org.apache.jasper.servlet.JspServlet @ 0x7f44d9f82d68 64 76.998.232 89,65%
org.apache.jasper.compiler.JspRuntimeContext @ 0x7f44d9f832d8 96
76.996.968 89,65%
java.util.concurrent.ConcurrentHashMap @ 0x7f44d9f83380 72 76.984.088 89,63%
java.util.concurrent.ConcurrentHashMap$Segment[16] @ 0x7f44d9f833c8
152 76.983.992 89,63%
java.util.concurrent.ConcurrentHashMap$Segment @ 0x7f44d9f839e0 48
76.963.384 89,61%
java.util.concurrent.ConcurrentHashMap$HashEntry[1] @ 0x7f44d9f83a40
32 76.963.288 89,61%
java.util.concurrent.ConcurrentHashMap$HashEntry @ 0x7f44da174660 48
76.963.256 89,61%
org.apache.jasper.servlet.JspServletWrapper @ 0x7f44da16f0a0 120
76.963.208 89,61%
org.apache.jsp.WEB_002dINF.jsp_002dlayouts.app.MainLayoutApp_jsp @
0x7f44da16f020 80 76.961.568 89,61%
org.apache.jasper.runtime.TagHandlerPool @ 0x7f44da1706f8 48 13.367.392 15,56%
org.apache.jasper.runtime.TagHandlerPool @ 0x7f44da170768 48 8.929.176 10,40%
org.apache.jasper.runtime.PageContextImpl @ 0x7f44daf72eb8 128 8.928.208 10,39%
org.apache.jasper.runtime.PageContextImpl @ 0x7f44dcd48f00 128 8.928.208 10,39%
org.apache.jasper.runtime.PageContextImpl @ 0x7f44dde5fe70 128 8.928.208 10,39%
org.apache.jasper.runtime.PageContextImpl @ 0x7f44da6ecd50 128 5.585.872 6,50%
net.sourceforge.stripes.tag.layout.LayoutComponentTag @ 0x7f44dda1a5e0
72 4.456.280 5,19%
net.sourceforge.stripes.tag.layout.LayoutDefinitionTag @
0x7f44dde63f98 48 4.454.296 5,19%
net.sourceforge.stripes.tag.layout.LayoutDefinitionTag @
0x7f44da16f070 48 4.454.280 5,19%
net.sourceforge.stripes.tag.layout.LayoutDefinitionTag @
0x7f44da178460 48 4.454.280 5,19%
net.sourceforge.stripes.tag.layout.LayoutDefinitionTag @
0x7f44dc9063d0 48 4.454.280 5,19%
org.apache.jasper.runtime.JspWriterImpl @ 0x7f44deb232f8 80 16.488 0,02%
org.apache.jasper.runtime.BodyContentImpl @ 0x7f44deb281d8 80 1.128 0,00%
org.apache.jasper.runtime.BodyContentImpl @ 0x7f44deb28668 80 1.128 0,00%
org.apache.jasper.runtime.TagHandlerPool @ 0x7f44da1707d8 48 816 0,00%
org.apache.jasper.runtime.PageContextImpl @ 0x7f44deb23238 128 512 0,00%
org.apache.jasper.runtime.TagHandlerPool @ 0x7f44da170550 48 296 0,00%
java.lang.String @ 0x7f44d7f6f558
/WEB-INF/jsp-layouts/pub/MainLayoutPub.jsp 40 144 0,00%
org.apache.jasper.runtime.TagHandlerPool @ 0x7f44da170688 48 112 0,00%
java.lang.String @ 0x7f44d7f6fe68 menuAbove 40 80 0,00%
Total: 20 entries 1.464 76.961.184 0,896

 Accumulated Objects by Class
Label Number Of Objects Used Heap Size Retained Heap Size
org.apache.jasper.runtime.PageContextImpl 5 640 32.371.008
org.apache.jasper.runtime.TagHandlerPool 5 240 22.297.792
net.sourceforge.stripes.tag.layout.LayoutDefinitionTag 4 192 17.817.136
net.sourceforge.stripes.tag.layout.LayoutComponentTag 1 72 4.456.280
org.apache.jasper.runtime.JspWriterImpl 1 80 16.488
org.apache.jasper.runtime.BodyContentImpl 2 160 2.256
java.lang.String 7 280 488
char[] 1 40 40
java.lang.Class 2 0 0
Total: 9 entries 28 1.704 76.961.488


Table Of ContentsCreated by Eclipse Memory Analyzer

I'll also send you a few screenshots directly(I'm not sure if everyone
on this list likes receiving png attachements from a mailing list) so
you can have a look at the formatted results. Thanks for your help,
Richard

On Tue, May 11, 2010 at 2:39 PM, Ben Gunter <gunter...@gmail.com> wrote:
> As far as I know, this is not a leak, per se. It is caused by tag pooling,
> which is the container *intentionally* holding stuff in memory so it can be
> reused instead of creating new objects each time they're needed. Containers
> can be configured to disable tag pooling if it causes a problem.
> I understand that people don't like the fact that layout tags buffer
> (sometimes large amounts of) data before finally sending it to the client,
> but it is a known limitation at this point. If it causes a problem, then I
> advise you not to use the layout tags in that case.
> If anybody can prove to me that Stripes itself is actually leaking memory
> then I'll take a look at fixing that.
> One day I will again look into making the layout tags stream data to the
> client, but I doubt it can be done without breaking some quirky aspect of
> the tags that somebody might actually be using. I wouldn't hold my breath
> waiting on a solution if I were you. It will likely have to wait until 1.6.
> -Ben
>
> On Tue, May 11, 2010 at 3:59 AM, Richard Hauswald
> <richard.hausw...@googlemail.com> wrote:
>>
>> Hello @all,
>> IMHO using stripes layout is a good thing - well if the tag will be
>> fixed to stream and the memory leak is removed :-) I don't think jsp
>> tag files should be used for as website templates / layout solution.
>> But they should be used for building components like buttons or modal
>> dialog screens even including java script calls. So stripes layout for
>> the main big layout (even nested) but jsp tag files for simple
>> components. Complex components should be built using custom jsp tags.
>> I totally agree with Karen - we should respect the mvc pattern. Using
>> stripes and jsp  this is just too easy :-)
>>
>> > In all this though is Stripes using ThreadLocal somewhere?  If so, is it
>> > not using the "remove" method on ThreadLocal to cleanup the data?  If it is
>> > using ThreadLocal but > not using "remove" then this is a SERIOUS bug
>> > IMHO...
>> I'm not sure which mad and ugly reference the leak produces. Tried
>> fixing it for 10 minutes only, setting the members of the jsp tag file
>> null - without success. The inheritance hierarchy makes it complicated
>> to detect all references in a short time. I do agree that at least
>> this leak should be fixed.
>> @Ben
>> Are going to find some time to hunt this leak?
>>
>> Regards,
>> Richard
>>
>>
>>
>> On Thu, May 6, 2010 at 3:15 PM, KR <k-no-s...@a4consulting.nl> wrote:
>> > Nikolaos,
>> >
>> > If you are using JSP as a view technology in an MVC pattern, then IMO
>> > you
>> > should not want to use scriptlets in you're JSP. Because what ever you
>> > want
>> > to do in a scriptlet is the responsibility of the controller a.k.a.
>> > Action
>> > Bean. Seen this way, it's actually a good thing that JSP tag files
>> > enforce
>> > the MVC pattern boundaries.
>> >
>> > The major benefit of JSP tag files is that they stream their output as
>> > it
>> > comes available. The Stripes layout tags, does not seem to do this (I
>> > think
>> > it starts streaming after the whole layout is out evaluated). This will
>> > slow
>> > down perceived performance of you're website, especially on complex or
>> > big
>> > pages.
>> >
>> > The drawback of JSP tag files is that they only have one body. But a
>> > Stripes
>> > layout tag can have multiple body parts (named layout components). This
>> > is a
>> > more flexible way of declaring templates and I did not yet find a good
>> > replacement for doing this just as good with JSP tag files. The JSP tag
>> > files thus result in a less flexible template structure.
>> >
>> >
>> >
>> > Karen
>> >
>> >
>> >
>> > "Nikolaos Giannopoulos" <nikol...@brightminds.org>
>> > wrote in message news:4be24d0f.5050...@brightminds.org...
>> >> Will,
>> >>
>> >> Thanks for the input.  This caught my attention about at least one
>> >> particular benefit of Stripes Layout over Tag Files:
>> >>
>> >> http://www.stripesframework.org/display/stripes/Layout+Reuse
>> >>
>> >> *Page fragment layouts
>> >> *
>> >> This might be obvious, but you can also use a layout to control how a
>> >> small piece of a page renders. Using the layout tags in this way is
>> >> very
>> >> similar to using the new JSP tag files which allow you to write custom
>> >> tags using JSP fragments. /_With on important difference. While you can
>> >> pass the result of JSP fragments to a tag file, those fragments cannot
>> >> contain any scriptlets._/ Often this isn't a problem, but sometimes it
>> >> can get in the way.
>> >>
>> >> It remains to be seen (yet) if this benefit will matter much in our
>> >> case
>> >> though I am curious if anyone end up using Stripes Layout over JSP tag
>> >> files b/c of this???  And why?  An example is cited at the URL above
>> >> but
>> >> I doubt I would ever want to do anything like that.
>> >>
>> >> --Nikolaos
>> >>
>> >>
>> >>
>> >> Will Hartung wrote:
>> >>> Nikolaos,
>> >>>
>> >>> I can't comment on Stripes Layout memory consumption, nor the use of
>> >>> Tiles.
>> >>>
>> >>> I can only follow up with what Richard said about JSP 2.0 Tag Files.
>> >>>
>> >>> I've not used Tiles or Stripes Layout simply because Tag Files exist,
>> >>> and
>> >>> I use those instead.
>> >>>
>> >>> JSP Tag Files effectively are as memory efficient (or inefficient) as
>> >>> JSP
>> >>> pages are themselves, since that's effectively all they are -- JSP
>> >>> files
>> >>> converted to code and dynamically run at page render time.
>> >>>
>> >>> Tag Files allow for ready refactoring and adding the right amount of
>> >>> abstractions to your JSPs.
>> >>>
>> >>> Regards,
>> >>>
>> >>> Will Hartung
>> >>>
>> >>>
>> >>
>> >
>> >
>> >
>> > --------------------------------------------------------------------------------
>> >
>> >
>> >>
>> >> ------------------------------------------------------------------------------
>> >>
>> >
>> >
>> >
>> > --------------------------------------------------------------------------------
>> >
>> >
>> >> _______________________________________________
>> >> Stripes-users mailing list
>> >> Stripes-users@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/stripes-users
>> >>
>> >
>> >
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > _______________________________________________
>> > Stripes-users mailing list
>> > Stripes-users@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/stripes-users
>> >
>>
>>
>>
>> --
>> Richard Hauswald
>> Blog: http://tnfstacc.blogspot.com/
>> LinkedIn: http://www.linkedin.com/in/richardhauswald
>> Xing: http://www.xing.com/profile/Richard_Hauswald
>>
>>
>> ------------------------------------------------------------------------------
>>
>> _______________________________________________
>> Stripes-users mailing list
>> Stripes-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/stripes-users
>
>
> ------------------------------------------------------------------------------
>
>
> _______________________________________________
> Stripes-users mailing list
> Stripes-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/stripes-users
>
>



-- 
Richard Hauswald
Blog: http://tnfstacc.blogspot.com/
LinkedIn: http://www.linkedin.com/in/richardhauswald
Xing: http://www.xing.com/profile/Richard_Hauswald

------------------------------------------------------------------------------

_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to