[
https://issues.apache.org/jira/browse/LOG4J2-578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14058860#comment-14058860
]
Scott commented on LOG4J2-578:
------------------------------
Results have not changed with rc2 (and tomcat 7.0.54):
# Good - Memory leak is *not* present if servlet version is correctly set in
web.xml.
# Bad - "contextDestroyed" method logging still does *not* work.
Test case:
# Configure tomcat
* enable auto deploy in server.xml
* configure tomcat-users.xml to enable a manager-gui user role
# Start tomcat (run startup.sh)
# Build the smem-0.1.war application (source code attached to this issue, built
by maven)
# cp target/smem-0.1.war <tomcat-root>/webapps/smem.war
# tail -f <tomcat-root>/logs/catalina.out
# Go to http://localhost:8080/manager/html to control webapps.
# Click 'Start' button for '/smem' Path.
# Observe log file contains "-----in contextInitialized" (done by
System.out.println) followed by the servlet version information. (done by
Logger.log) (See ContextFinalizer.java in smem code)
# Click 'Stop' button for '/smem' Path.
# Observe log file contains "-----in contextDestroyed" (done by
System.out.println). This is the issue where the logging context is destroyed
prematurely an no log statements in "contextDestroyed" make it to the output
file.
An interesting thing I noticed is that if Tomcat and the WAR are run by maven
using 'mvn tomcat7:run' and the Tomcat application is terminated with a kill
signal 'CTRL+C' then the "contextDestroyed" method is able to log to the
console. I hope this gives a hint if things are destructed differently w.r.t
to log4j in these 2 use cases.
I did not test the case with no web.xml and instead using spring java
configuration because I am assuming this is a Spring issue of not setting the
servlet version correctly? You said that {quote}Log4J auto-initialization
needs this version to be correct. (See comments in LOG4J2-529 for
details.){quote}
Can you provide more details as to how log4j is accessing this information? For
example from my above comments/testing is appears log4j may be using the
{code}getEffectiveMajorVersion{code} and {code}getEffectiveMinorVersion{code}
on the {code}ServletContext{code} servlet instance.
> JMX Memory Leak in Servlet Container
> ------------------------------------
>
> Key: LOG4J2-578
> URL: https://issues.apache.org/jira/browse/LOG4J2-578
> Project: Log4j 2
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.0-rc1
> Environment: Ubuntu 12.04
> Linux 3.2.0-58-generic x86_64 GNU/Linux
> 8 GB RAM
> java version "1.7.0_51"
> Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
> JAVA_OPTS=-Xmx1024m -Dsun.net.inetaddr.ttl=60
> -Dsun.net.inetaddr.negative.ttl=60 -Djava.net.preferIPv4Stack=true
> -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC
> -XX:+CMSClassUnloadingEnabled
> Reporter: Scott
> Assignee: Remko Popma
> Priority: Critical
> Labels: memory_leak
>
> If JMX is enabled in Log4j2 (it is by default) and a web application is
> unloaded then Log4j2 creates a memory leak. This can be observed by deploying
> a web application to tomcat7 and exercising the stop, undeploy, or redeploy
> actions. The "unloaded" terminology is meant to be generic across servlet
> containers in that any action which is designed to make the web application
> classes eligible for GC. The memory leak is believed to be caused by log4j
> for the following reasons:
> 1)Heap Dump reveals the classloader instance responsible for the WAR plugin
> (for tomcat7 is of type
> {code}org.apache.catalina.loader.WebappClassLoader{code}) has 1 non weak/soft
> reference which is of type
> {code}org.apache.logging.log4j.core.jmx.LoggerContextAdmin{code} after the
> WAR has been stopped or undeployed.
> 2) Disabling JMX in Log4j2 (see
> [http://logging.apache.org/log4j/2.x/manual/jmx.html]) results in no memory
> leaks and all resources are GC as expected.
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]