[ https://issues.apache.org/jira/browse/LOG4J2-2366?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16894861#comment-16894861 ]
ASF subversion and git services commented on LOG4J2-2366: --------------------------------------------------------- Commit 4ac441d1f9e4373c5477cc896057469b41b8b1f4 in logging-log4j2's branch refs/heads/release-2.x from Ralph Goers [ https://gitbox.apache.org/repos/asf?p=logging-log4j2.git;h=4ac441d ] LOG4J2-2366 - Remove references to LoggerContext when it is shutdown > LoggerContext leak using Log4jLoggerFactory > ------------------------------------------- > > Key: LOG4J2-2366 > URL: https://issues.apache.org/jira/browse/LOG4J2-2366 > Project: Log4j 2 > Issue Type: Bug > Components: SLF4J Bridge > Affects Versions: 2.11.0 > Reporter: Luciano Raineri Marchina > Priority: Major > Attachments: minimal_example.7z, patched_after.hprof.7z, > patched_after_waited.hprof.7z, patched_before.hprof.7z > > > Hi all! > We are using log4j2 as the logging framework for our applications. > This is done by using the log4j implementation provided for slf4j. > The problem we are seeing is that after many application redeploys, many > LoggerContexts are still referenced, even after stopping them. > I've taken many heap dumps of our standalone server and found that many of > these references are kept by a WeakHashMap<> instantiated in the > Log4jLoggerFactory. ('registry' attribute of > org.apache.logging.log4j.spi.AbstractLoggerAdapter) > What happens is that, even when the Map is a WeakHashMap (Where the keys > should be weakly referenced), it will never be cleared because it's values > keep references to those same keys. > If you check the heap dumps that i've provided, you can see that most of the > LoggerContexts (org.mule.runtime.module.launcher.log4j2.MuleLoggerContext) > states are: STOPPED and even it's loggers configurations are updated to > NullConfiguration, but the references are kept. > On the other hand, i could remove the references to their contexts for the > loggers ('context' attribute of org.apache.logging.log4j.core.Logger) when > those contexts are stopped but the field is final and private, which makes it > impossible to change for an child class. > For the heapdumps, i took them as follows: > * deployed application > * dumped patched_before.hprof > * redeployed app 10 times > * dumped patched_after.hprof > * waited an hour > * dumped patched_after_waited.hprof > You can see that in _patched_before.hprof_ there are only 4 LoggerContext > instances while in _patched_after.hprof_ and _patched_after_waited.hprof_ > there are around 16, most of them referenced by a logger that is linked to a > value in the WeakHashMap mentioned above. > I think that you should, either provide a way to remove entries from that > 'registry', or check for circular dependencies somehow so that they are > removed by the GC. > Thanks! -- This message was sent by Atlassian JIRA (v7.6.14#76016)