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


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.

Reply via email to