[ 
https://issues.apache.org/jira/browse/SLING-3359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13896261#comment-13896261
 ] 

Chetan Mehrotra commented on SLING-3359:
----------------------------------------

As an extension one can found out possible leak suspects (actual root cause) 
using the script provided at [1]. This script can be executed as part of jHat 
OQL [2]. The script dumps the report printing out the live path of object which 
is preventing it from getting GC. Below is a portion of the report generated 
from one of the heap dumps analyzed

{noformat}
        org.apache.sling.event.impl.jobs.queues.AbstractJobQueue$1@0x12547e960
         Following are few of the live paths found
         Live path
                
org.apache.sling.event.impl.jobs.queues.AbstractJobQueue$1@0x12547e960
                java.lang.Thread@0x12547e888
                [Ljava.lang.Thread;@0x124f18f58
                java.lang.ThreadGroup@0x123346e80
                java.lang.Thread@0x126635c48
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x13161da50
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x1318253e0
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x1318253c0
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x1318253a0
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a128c90
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c198
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c178
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c158
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c138
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c118
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c0f8
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c0d8
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c0b8
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c098
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c078
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a24c058
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a007e30
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a007e10
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a007df0
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a007dd0
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a007db0
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a007d90
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$Node@0x12a007d70
                
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@0x125d2c968
                java.lang.Thread@0x126637b00
                java.util.concurrent.ThreadPoolExecutor$Worker@0x126637b68
                java.util.HashMap$Entry@0x126640058
                [Ljava.util.HashMap$Entry;@0x12663fde8
                java.util.HashMap@0x125d2ca08
                java.util.HashSet@0x125d2c9f8
                java.util.concurrent.ThreadPoolExecutor@0x125d2c8a0
                
org.apache.sling.commons.threads.impl.DefaultThreadPool@0x125d2c7b0 [*]
                
org.apache.sling.commons.threads.impl.ThreadPoolFacade@0x125d2c798 [*]
                
org.apache.sling.commons.threads.impl.DefaultThreadPoolManager$Entry@0x125d535d0
 [*]
                java.util.HashMap$Entry@0x125d535b0
                [Ljava.util.HashMap$Entry;@0x124147940
                java.util.HashMap@0x124147910
                
org.apache.sling.commons.threads.impl.DefaultThreadPoolManager@0x124146e50 [*]
                org.apache.felix.framework.ServiceRegistrationImpl@0x12414f3e8
                org.apache.sling.commons.threads.impl.Activator@0x12414f3d0 [*]
                org.apache.felix.framework.BundleImpl@0x122809f78
                org.apache.felix.framework.ServiceRegistrationImpl@0x1241e8c40
                class org.apache.sling.commons.threads.impl.WebConsolePrinter
                
org.apache.sling.commons.threads.impl.WebConsolePrinter@0x1241e8a70 [*]
{noformat}

Logged SLING-3383 based on above. 

[1] https://gist.github.com/chetanmeh/8860776
[2] http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html

> Classloader Leak Detector Console Tab
> -------------------------------------
>
>                 Key: SLING-3359
>                 URL: https://issues.apache.org/jira/browse/SLING-3359
>             Project: Sling
>          Issue Type: New Feature
>          Components: Console
>            Reporter: Ian Boston
>            Assignee: Chetan Mehrotra
>         Attachments: 
> org.apache.sling.extensions.classloader-leak-detector-0.0.1-SNAPSHOT-src.zip
>
>
> Chetan has created a classloader leak detector console at 
> https://github.com/chetanmeh/sling-leak-detector. It would be really good to 
> get this into the contrib are and released so that consumers of Sling can use 
> it to locate code in bundles that is leaking classloaders.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to