[
https://issues.apache.org/jira/browse/CXF-2689?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Kulp resolved CXF-2689.
------------------------------
Resolution: Fixed
Fix Version/s: 2.3.0
2.2.11
This was apparently resolved in JAXB 2.1.13 as they made the saving of that
property in the thread local require a property to be set and it's not on by
default.
> Classloader not GC'ed after undeploying the applications. Reference from
> SingleElementLeafProperty
> --------------------------------------------------------------------------------------------------
>
> Key: CXF-2689
> URL: https://issues.apache.org/jira/browse/CXF-2689
> Project: CXF
> Issue Type: Bug
> Components: JAX-WS Runtime
> Affects Versions: 2.2.6
> Environment: Windows XP / Solaris 10
> JBoss 5.1.0.GA
> Reporter: Danny Blazejczak
> Fix For: 2.2.11, 2.3.0
>
>
> I found that after undeploying my applications from JBoss 5.1.0.GA the
> classloaders remain hanging and are never garbage collected. These are the
> items I have tried so far:
> - JVM options : -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled
> -XX:+CMSClassUnloadingEnabled
> These make that the permgen gets collected periodically.
> - I have verified that after several redeployments there is indeed the
> PermGen OOM error.
> The applications consist of a war package, containing the JSP frontend. and
> an EAR containing all the backend services (it includes CXF 2.2.6 and JAXB
> 2.1.12 within the EAR). I use CXF as a jaxws:client:
> Analyzing a memory dump several minutes after undeployment, and after
> manually triggering GC, I extracted this with Eclipse MAT.
> It contains the "Path to GC (Excluding all weak, soft and phantom
> references)":
> Class Name
> | Shallow Heap | Retained Heap
> ---------------------------------------------------------------------------------------------------------------------------------------
> org.jboss.classloader.spi.base.BaseClassLoader @ 0xdf9e538
> | 96 | 10,484,208
> '- <classloader> class
> com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty @ 0x2711fde0
> | 8 | 8
> |- <class> com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty
> @ 0xeeb0140 | 40 | 1,336
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x10173b88
> | 32 | 32
> | | '- [39] java.lang.ThreadLocal$ThreadLocalMap$Entry[128] @ 0xf7ca2f8
> | 528 | 23,240
> | | '- table java.lang.ThreadLocal$ThreadLocalMap @ 0xf6647a8
> | 24 | 23,264
> | | '- threadLocals java.lang.Thread @ 0xf4856c0
> http-127.0.0.1-8080-14 Native Stack, Thread| 104 | 23,928
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x101d8f98
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x101d9240
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x101e8df0
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x103c01f8
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x104c1b20
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x10567780
> | 32 | 32
> | '- Total: 7 entries
> | |
> |- <class> com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty
> @ 0xed70788 | 40 | 1,280
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xf8dcc78
> | 32 | 32
> | | '- [9] java.lang.ThreadLocal$ThreadLocalMap$Entry[128] @ 0xf7bca90
> | 528 | 22,520
> | | '- table java.lang.ThreadLocal$ThreadLocalMap @ 0xf515ca8
> | 24 | 22,544
> | | '- threadLocals java.lang.Thread @ 0xf35e078
> http-127.0.0.1-8080-8 Native Stack, Thread | 104 | 23,208
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xf8dcd18
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xf8e7628
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xfd624d0
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xfd6d480
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xfd77710
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xfd96740
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xfd9d5c0
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0xff51780
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x10145a28
> | 32 | 32
> | |- value java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x106537c8
> | 32 | 32
> | '- Total: 11 entries
> | |
> '- Total: 2 entries
> | |
> ---------------------------------------------------------------------------------------------------------------------------------------
> It shows the SingleElementLeafProperty from JAXBImpl holding references to
> the classloader (of the EAR packaged application). the instance
> SingleElementLeafProperty contains a fieldName which holds one of the
> parameter names of the invoked operation.
> When I open a JPDA debug session to JBoss and suspend the Threads, I found
> indeed they included hard references to the SingleElementLeafProperty. This
> is a dump of the variables in the suspended Thread threadLocals:
> [25] ThreadLocal$ThreadLocalMap$Entry (id=229)
> discovered null
> next ThreadLocal$ThreadLocalMap$Entry (id=229)
> queue ReferenceQueue$Null (id=215)
> referent null
> value SingleElementLeafProperty<BeanT> (id=239)
> acc AdaptedAccessor<BeanT,InMemValueT,OnWireValueT>
> (id=240)
> defaultValue null
> fieldName "msisdn" (id=244)
> nillable false
> propertyInfo null
> tagName Name (id=245)
> xacc
> TransducedAccessor$CompositeTransducedAccessorImpl<BeanT,ValueT> (id=247)
>
> acc AdaptedAccessor<BeanT,InMemValueT,OnWireValueT>
> (id=240)
> adapter Class<T>
> (javax.xml.bind.annotation.adapters.NormalizedStringAdapter) (id=253)
> annotations null
> annotationType null
> cachedConstructor null
> classRedefinedCount 0
> declaredAnnotations null
> declaredConstructors
> SoftReference<T> (id=349)
> declaredFields null
> declaredMethods null
> declaredPublicFields null
> declaredPublicMethods null
> enumConstantDirectory null
> enumConstants null
> genericInfo ClassRepository
> (id=279)
> lastRedefinedCount 0
> name
> "javax.xml.bind.annotation.adapters.NormalizedStringAdapter" (id=283)
> newInstanceCallerCache null
> publicConstructors null
> publicFields null
> publicMethods null
> core Accessor$FieldReflection<BeanT,ValueT>
> (id=254)
> f Field (id=294)
> annotations byte[20]
> (id=298)
> clazz Class<T>
> (com.al.apc.generated.services.customeraccount.BaseAccountRequest) (id=300)
>
> declaredAnnotations
> LinkedHashMap<K,V> (id=301)
> fieldAccessor null
> genericInfo null
> modifiers 4
> name "msisdn" (id=244)
> override true
> overrideFieldAccessor
> UnsafeObjectFieldAccessorImpl (id=303)
> root Field (id=305)
> securityCheckCache null
> securityCheckTargetClassCache
> null
> signature null
> slot 7
> type Class<T>
> (java.lang.String) (id=209)
> valueType Class<T>
> (java.lang.String) (id=209)
> staticAdapter null
> valueType Class<T> (java.lang.String)
> (id=209)
> xducer RuntimeBuiltinLeafInfoImpl$1 (id=260)
> I have seen an old bug reference CXF-457 which clears the threadlocal at the
> end of invoke() method in JaxWsMethodInvoker. The proxy used in my case is
> JaxWsClientProxy. I found that after the method invocation the response is
> cleared from the threadlocals, but several parameter names remain there.
> I think my setup is OK. We passed a lot of tests, including 3M successful
> generated (test)load transactions.
> Any suggestions?
> Kind Regards,
> Danny
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.