Hi Guys,

I changed it according to the idea of Bram,
and tested it with my application that was consuming far to much
memory (reproducable).
It's now stable below 300 MB of Heap.

@Bram thanks for pointing to this, this really safed my day :-D

regards, Achim

2012/10/23 Achim Nierbeck <bcanh...@googlemail.com>:
> Hi Andreas,
>
> I did change this locally and I'm testing it right now.
> Will give feedback later ...
>
> regards, Achim
>
> 2012/10/23 Andreas Pieber <anpie...@gmail.com>:
>> Well, I can commit your proposed changes, but you would still have to build
>> pax wicket locally and use the snapshots. When you confirm that the problem
>> I really fixed I can push a release to Central within a Max of 8 hours...
>>
>> Let me know of I can help you in any way.
>>
>> Kind regards, Andreas
>>
>> On Oct 22, 2012 6:23 PM, "Bram Pouwelse" <b...@pouwelse.com> wrote:
>>>
>>> Hi Andreas,
>>>
>>> I've looked at the PropertyResolver at line 1447 a key is determined
>>> to use in a ConcurrentHashMap [1]. This key is the application
>>> returned by getApplication() after some testing I found out that
>>> equals on application doesn't work by putting
>>> getApplication().equals(getApplication())  in a sample application.
>>>
>>> If I remove the special case for equals, hashCode and toString from
>>> the intercept method [2]  getApplication().equals(getApplication())
>>> returns true as I would expect. I've created a similar HashMap in my
>>> test application and a map with Application as a key seems to work
>>> after the change. Didn't have a chance to do any real world test with
>>> this.
>>>
>>> Thanks
>>>
>>> Bram
>>>
>>> [1]
>>> https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java#L1447
>>> [2]
>>> https://github.com/ops4j/org.ops4j.pax.wicket/blob/master/service/src/main/java/org/ops4j/pax/wicket/internal/PaxWicketApplicationFactory.java#L115
>>>
>>> 2012/10/22 Andreas Pieber <anpie...@gmail.com>:
>>> > well, it's quite possible that the CG lib does some quircks here. Has
>>> > anyone already tried to set breakpoints into the PropertyResolver [1]
>>> > checking what's exactly the problem? I'll start tomorrow morning by
>>> > doing exactly this...
>>> >
>>> > If getApplication().equals(getApplication()) is really the problem
>>> > (where did you find that code btw?) I might find a workaround for that
>>> > case... let's see to nail down the problem first.
>>> >
>>> > Kind regards,
>>> > Andreas
>>> >
>>> > [1]
>>> > https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java
>>> >
>>> > On Mon, Oct 22, 2012 at 5:07 PM, Achim Nierbeck
>>> > <bcanh...@googlemail.com> wrote:
>>> >> Oh, one more,
>>> >>
>>> >> after running a Component Report i got the following info about it:
>>> >>
>>> >>
>>> >>
>>> >> Empty Collections
>>> >>
>>> >>
>>> >> Detected the following empty collections:
>>> >> •6.482.518 instances of java.util.concurrent.ConcurrentHashMap$Segment
>>> >> retain >= 829.762.448 bytes.
>>> >>
>>> >>
>>> >>  Collection Fill Ratios
>>> >>
>>> >>
>>> >> Detected the following collections with fill ratios below 20%:
>>> >> •432.156 instances of java.util.concurrent.ConcurrentHashMap retain >=
>>> >> 1.018.329.768 bytes.
>>> >>
>>> >> Map Collision Ratios
>>> >>
>>> >>
>>> >> Detected the following maps with collision ratios above 80%:
>>> >> •1 instances of java.util.concurrent.ConcurrentHashMap retain
>>> >> 1.038.046.920 bytes.
>>> >> •1 instances of java.util.concurrent.ConcurrentHashMap$Segment retain
>>> >> 296 bytes.
>>> >>
>>> >> I haven't found the root cause of it, but somehow I have the
>>> >> impression this might be an issue of Pax-Wicket?
>>> >>
>>> >> btw. I'm using Pax-Wicket in Version 1.0.2
>>> >>
>>> >> regards, Achim
>>> >>
>>> >>
>>> >> 2012/10/22 Achim Nierbeck <bcanh...@googlemail.com>:
>>> >>> Here a little update to this, cause today my application did run into
>>> >>> an OOM due to this (with 1GB Heap)
>>> >>> The current HeapDump shows me
>>> >>>
>>> >>> That the wicket PropertyResolver uses about 1GB Ram, from those are
>>> >>> about 62MB for
>>> >>>
>>> >>>
>>> >>> ------------------------------------------------------------------------------------------------------------------
>>> >>> ref
>>> >>> |CGLIB$CALLBACK_0|org.ops4j.pax.wicket.internal.PaxWicketApplicationFactory$WebApplicationWrapper
>>> >>> @ 0xf2b693d0
>>> >>>
>>> >>> ------------------------------------------------------------------------------------------------------------------
>>> >>>
>>> >>> I guess those are basically the session, looks OK right now.
>>> >>> But the rest is consumed by about 260000 ConcurrentHashMap Entries.
>>> >>>
>>> >>> For example:
>>> >>>
>>> >>> Type|Name            |Value
>>> >>>
>>> >>> ------------------------------------------------------------------------------------------------------------------
>>> >>> ref
>>> >>> |CGLIB$CALLBACK_0|org.ops4j.pax.wicket.internal.PaxWicketApplicationFactory$WebApplicationWrapper
>>> >>> @ 0xc1fa0250
>>> >>>
>>> >>> ------------------------------------------------------------------------------------------------------------------
>>> >>>
>>> >>> I don't know how to say this, but it seems awfully wrong right now ...
>>> >>>
>>> >>> regards, Achim
>>> >>>
>>> >>> 2012/10/22 Achim Nierbeck <bcanh...@googlemail.com>:
>>> >>>> Hi,
>>> >>>>
>>> >>>> I've seen the exact thing but didn't have the time (yet) to get a
>>> >>>> hold of it.
>>> >>>> But since it's mostly Wicket classes involved I had the impression
>>> >>>> it's wicket itself
>>> >>>> that does this.
>>> >>>> To prove something like it, I wanted to create an example which would
>>> >>>> work
>>> >>>> in both world (pax-wicket and wicket) but due to lack of time I
>>> >>>> wasn't able to
>>> >>>> get to it.
>>> >>>>
>>> >>>> But since I'm not the only one I'd guess this is something worthy to
>>> >>>> investigate :)
>>> >>>> My next test would have been to switch to Wicket 6 (pax-wicket 2.0)
>>> >>>>
>>> >>>> regards, Achim
>>> >>>>
>>> >>>> 2012/10/22 Bram Pouwelse <b...@pouwelse.com>:
>>> >>>>> Hi,
>>> >>>>>
>>> >>>>> I'm working on an application that's using Pax Wicket (version
>>> >>>>> 1.1.0).
>>> >>>>> Because the application is using more memory than expected I'm
>>> >>>>> running
>>> >>>>> some tests and analysing heap dumps for a few days now.
>>> >>>>>
>>> >>>>> While analysing the heap of my "weekend test" I've found this at the
>>> >>>>> top of the Pax Wicket bundle class loader at the top of the
>>> >>>>> dominator
>>> >>>>> tree, seems to me that the PropertyResolver is creating new
>>> >>>>> DefaultClassCache instances all the time but I don't understand why.
>>> >>>>>
>>> >>>>> Below I've pasted a few selections from Eclipse Memory Analyzer:
>>> >>>>>
>>> >>>>>
>>> >>>>> Dominator tree:
>>> >>>>>
>>> >>>>> Class Name
>>> >>>>>                                   | Shallow Heap | Retained Heap |
>>> >>>>> Percentage
>>> >>>>>
>>> >>>>> -----------------------------------------------------------------------------------------------------------------------------------------------------
>>> >>>>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5 @
>>> >>>>> 0xc123ee58                          |           88 |   643,602,288 |
>>> >>>>>   89.39%
>>> >>>>> |- java.util.Vector @ 0xc1252208
>>> >>>>>                                   |           32 |   643,566,800 |
>>> >>>>> 89.38%
>>> >>>>> |  '- java.lang.Object[1280] @ 0xc2445ee8
>>> >>>>>                                   |        5,136 |   643,566,768 |
>>> >>>>> 89.38%
>>> >>>>> |     |- class org.apache.wicket.util.lang.PropertyResolver @
>>> >>>>> 0xb9b5d330                                 |           32 |
>>> >>>>> 643,420,472 |     89.36% *
>>> >>>>> |     |  '- java.util.concurrent.ConcurrentHashMap @ 0xc2962bf8
>>> >>>>>                                   |           48 |   643,420,440 |
>>> >>>>> 89.36%
>>> >>>>> |     |     '- java.util.concurrent.ConcurrentHashMap$Segment[16] @
>>> >>>>> 0xc2962c28                           |           80 |   643,420,392
>>> >>>>> |
>>> >>>>>    89.36%
>>> >>>>> |     |        |- java.util.concurrent.ConcurrentHashMap$Segment @
>>> >>>>> 0xc2963098                            |           40 |   643,418,872
>>> >>>>> |
>>> >>>>>     89.36% **
>>> >>>>> |     |        |  |-
>>> >>>>> java.util.concurrent.ConcurrentHashMap$HashEntry[262144] @
>>> >>>>> 0xd8674190
>>> >>>>>              |    1,048,592 |   643,418,768 |     89.36%
>>> >>>>> |     |        |  |  '-
>>> >>>>> java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea9687a8
>>> >>>>>           |           32 |   642,370,176 |     89.22%
>>> >>>>> |     |        |  |     |-
>>> >>>>> java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea967a28
>>> >>>>>        |           32 |   642,366,720 |     89.22%
>>> >>>>> |     |        |  |     |  |-
>>> >>>>> java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea966ca8
>>> >>>>>     |           32 |   642,363,264 |     89.22% ***
>>> >>>>> |     |        |  |     |  |-
>>> >>>>> org.apache.wicket.util.lang.PropertyResolver$DefaultClassCache @
>>> >>>>> 0xea967398|           16 |         3,424 |      0.00%
>>> >>>>> |     |        |  |     |  '- Total: 2 entries
>>> >>>>>                                   |              |               |
>>> >>>>> |     |        |  |     |-
>>> >>>>> org.apache.wicket.util.lang.PropertyResolver$DefaultClassCache @
>>> >>>>> 0xea968118   |           16 |         3,424 |      0.00%
>>> >>>>> |     |        |  |     '- Total: 2 entries
>>> >>>>>                                   |              |               |
>>> >>>>>
>>> >>>>> -----------------------------------------------------------------------------------------------------------------------------------------------------
>>> >>>>>
>>> >>>>> * class org.apache.wicket.util.lang.PropertyResolver @ 0xb9b5d330
>>> >>>>> [statics]:
>>> >>>>> Type|Name                               |Value
>>> >>>>>
>>> >>>>> ---------------------------------------------------------------------------------------------
>>> >>>>> ref |SET                                |set
>>> >>>>> ref |IS                                 |is
>>> >>>>> ref |GET                                |get
>>> >>>>> ref
>>> >>>>> |applicationToClassesToGetAndSetters|java.util.concurrent.ConcurrentHashMap
>>> >>>>> @ 0xc2962bf8
>>> >>>>> int |RESOLVE_CLASS                      |2
>>> >>>>> int |CREATE_NEW_VALUE                   |1
>>> >>>>> int |RETURN_NULL                        |0
>>> >>>>> ref |log
>>> >>>>> |org.ops4j.pax.logging.slf4j.Slf4jLogger @ 0xc2972ba0
>>> >>>>>
>>> >>>>> ---------------------------------------------------------------------------------------------
>>> >>>>>
>>> >>>>> ** java.util.concurrent.ConcurrentHashMap$HashEntry[262144] @
>>> >>>>> 0xd8674190 [attributes]
>>> >>>>> Type |Name      |Value
>>> >>>>>
>>> >>>>> --------------------------------------------------------------------------------------
>>> >>>>> float|loadFactor|0.75
>>> >>>>> ref  |table
>>> >>>>> |java.util.concurrent.ConcurrentHashMap$HashEntry[262144] @
>>> >>>>> 0xd8674190
>>> >>>>> int  |threshold |196608
>>> >>>>> int  |modCount  |185871
>>> >>>>> int  |count     |185871
>>> >>>>> ref  |sync
>>> >>>>> |java.util.concurrent.locks.ReentrantLock$NonfairSync
>>> >>>>> @ 0xc29630c0
>>> >>>>>
>>> >>>>> --------------------------------------------------------------------------------------
>>> >>>>>
>>> >>>>>
>>> >>>>> *** java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea966ca8
>>> >>>>> [attributes]
>>> >>>>> Type|Name |Value
>>> >>>>>
>>> >>>>> ---------------------------------------------------------------------------------------------------
>>> >>>>> ref |next |java.util.concurrent.ConcurrentHashMap$HashEntry @
>>> >>>>> 0xea965f28
>>> >>>>> ref
>>> >>>>> |value|org.apache.wicket.util.lang.PropertyResolver$DefaultClassCache
>>> >>>>> @ 0xea966618
>>> >>>>> int |hash |1234246985
>>> >>>>> ref |key
>>> >>>>> |nl.ditp.fabuland.core.internal.WicketApplication$$EnhancerByCGLIB$$4188d86a
>>> >>>>> @ 0xc22bcc88
>>> >>>>>
>>> >>>>> ---------------------------------------------------------------------------------------------------
>>> >>>>>
>>> >>>>>
>>> >>>>> Is this caused by a coding error in the application or a bug in
>>> >>>>> Wicket
>>> >>>>> / Pax Wicket?
>>> >>>>>
>>> >>>>> Thanks,
>>> >>>>>
>>> >>>>> Bram Pouwelse
>>> >>>>>
>>> >>>>> _______________________________________________
>>> >>>>> general mailing list
>>> >>>>> general@lists.ops4j.org
>>> >>>>> http://lists.ops4j.org/mailman/listinfo/general
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> --
>>> >>>>
>>> >>>> Apache Karaf <http://karaf.apache.org/> Committer & PMC
>>> >>>> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
>>> >>>> Committer & Project Lead
>>> >>>> OPS4J Pax for Vaadin
>>> >>>> <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter &
>>> >>>> Project
>>> >>>> Lead
>>> >>>> blog <http://notizblog.nierbeck.de/>
>>> >>>
>>> >>>
>>> >>>
>>> >>> --
>>> >>>
>>> >>> Apache Karaf <http://karaf.apache.org/> Committer & PMC
>>> >>> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
>>> >>> Committer & Project Lead
>>> >>> OPS4J Pax for Vaadin
>>> >>> <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project
>>> >>> Lead
>>> >>> blog <http://notizblog.nierbeck.de/>
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >>
>>> >> Apache Karaf <http://karaf.apache.org/> Committer & PMC
>>> >> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
>>> >> Committer & Project Lead
>>> >> OPS4J Pax for Vaadin
>>> >> <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project
>>> >> Lead
>>> >> blog <http://notizblog.nierbeck.de/>
>>> >>
>>> >> _______________________________________________
>>> >> general mailing list
>>> >> general@lists.ops4j.org
>>> >> http://lists.ops4j.org/mailman/listinfo/general
>>> >
>>> > _______________________________________________
>>> > general mailing list
>>> > general@lists.ops4j.org
>>> > http://lists.ops4j.org/mailman/listinfo/general
>>>
>>> _______________________________________________
>>> general mailing list
>>> general@lists.ops4j.org
>>> http://lists.ops4j.org/mailman/listinfo/general
>>
>>
>> _______________________________________________
>> general mailing list
>> general@lists.ops4j.org
>> http://lists.ops4j.org/mailman/listinfo/general
>>
>
>
>
> --
>
> Apache Karaf <http://karaf.apache.org/> Committer & PMC
> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
> Committer & Project Lead
> OPS4J Pax for Vaadin
> <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project
> Lead
> blog <http://notizblog.nierbeck.de/>



-- 

Apache Karaf <http://karaf.apache.org/> Committer & PMC
OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
Committer & Project Lead
OPS4J Pax for Vaadin
<http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project
Lead
blog <http://notizblog.nierbeck.de/>

_______________________________________________
general mailing list
general@lists.ops4j.org
http://lists.ops4j.org/mailman/listinfo/general

Reply via email to