Costa Theodosiou (JIRA)
2014-09-10 06:13:28 UTC
Costa Theodosiou created LOG4J2-819:
---------------------------------------
Summary: PermGen OutOfMemoryError when reloading webapp on Tomcat 6
Key: LOG4J2-819
URL: https://issues.apache.org/jira/browse/LOG4J2-819
Project: Log4j 2
Issue Type: Bug
Components: Core
Affects Versions: 2.0.2
Environment: Tomcat 6
Reporter: Costa Theodosiou
Priority: Critical
When reloading an application 3 or 4 times in Tomcat 6, the application crashes with a "java.lang.OutOfMemoryError: PermGen space" exception.
After some investigation using the "When all else fails" section of https://wiki.apache.org/tomcat/OutOfMemory in conjunction with Java VisualVM, I have narrowed down the problem to the Thread created within org.apache.logging.log4j.core.util.CoarseCachedClock.
When a Thread is created, it contains a reference to the classloader that it was created with. In this case, the Thread's contextClassLoader field contains a reference to the WebappClassLoader. When Tomcat attempts to unload the webapp, the Thread still holds onto this reference which prevents WebappClassLoader from being freed.
Perhaps the Log4jServletContextListener (Log4jWebInitializerImpl) can be made to stop the CoarseCachedClock thread.
I believe this is not an obvious issue on Tomcat 7 due to https://wiki.apache.org/tomcat/MemoryLeakProtection.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------
Summary: PermGen OutOfMemoryError when reloading webapp on Tomcat 6
Key: LOG4J2-819
URL: https://issues.apache.org/jira/browse/LOG4J2-819
Project: Log4j 2
Issue Type: Bug
Components: Core
Affects Versions: 2.0.2
Environment: Tomcat 6
Reporter: Costa Theodosiou
Priority: Critical
When reloading an application 3 or 4 times in Tomcat 6, the application crashes with a "java.lang.OutOfMemoryError: PermGen space" exception.
After some investigation using the "When all else fails" section of https://wiki.apache.org/tomcat/OutOfMemory in conjunction with Java VisualVM, I have narrowed down the problem to the Thread created within org.apache.logging.log4j.core.util.CoarseCachedClock.
When a Thread is created, it contains a reference to the classloader that it was created with. In this case, the Thread's contextClassLoader field contains a reference to the WebappClassLoader. When Tomcat attempts to unload the webapp, the Thread still holds onto this reference which prevents WebappClassLoader from being freed.
Perhaps the Log4jServletContextListener (Log4jWebInitializerImpl) can be made to stop the CoarseCachedClock thread.
I believe this is not an obvious issue on Tomcat 7 due to https://wiki.apache.org/tomcat/MemoryLeakProtection.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)