Skip to content

ActivityCorrelator is causing a classloader leak #314

@JohnA2

Description

@JohnA2

ActivityCorrelator uses ThreadLocal, but it never calls ThreadLocal.remove() to clean it up. As a result, if a thread pool is used, the classloader that loaded ActivityCorrelator can never be garbage collected thus creating a memory leak.

Example of the path from GC root:

this     - value: org.apache.catalina.loader.WebappClassLoader #3
 <- <classLoader>     - class: com.microsoft.sqlserver.jdbc.ActivityId, value: org.apache.catalina.loader.WebappClassLoader #3
  <- <class>     - class: com.microsoft.sqlserver.jdbc.ActivityId, value: com.microsoft.sqlserver.jdbc.ActivityId class ActivityId
   <- value     - class: java.lang.ThreadLocal$ThreadLocalMap$Entry, value: com.microsoft.sqlserver.jdbc.ActivityId #2
    <- [54]     - class: java.lang.ThreadLocal$ThreadLocalMap$Entry[], value: java.lang.ThreadLocal$ThreadLocalMap$Entry #137
     <- table     - class: java.lang.ThreadLocal$ThreadLocalMap, value: java.lang.ThreadLocal$ThreadLocalMap$Entry[] #28
      <- threadLocals (thread object)     - class: org.apache.tomcat.util.threads.TaskThread, value: java.lang.ThreadLocal$ThreadLocalMap #28

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions