2016-10-06 3 views
2

Я использую log4j2 для ведения журнала, версии tomcat8 и java8. Я использовал атрибут «monitorInterval» для периодической проверки моего log4j2.xml. Во время выключения моего tomcat я сталкиваюсь с проблемой утечки памяти. Как решить эту проблему с утечкой памяти?Ошибка утечки памяти Tomcat для журнала log4j2

Ниже приведены Catalina журналы:

06-Октябрь-2016 15: 13: 55,927 ПРЕДУПРЕЖДЕНИЕ [локальный-стартстопный-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Веб-приложение [mywebapp], похоже, запустил поток с именем [Log4j2-Log4j2Scheduled-1], но не смог его остановить. Это, скорее всего, создаст утечку памяти. След трассировки потока: sun.misc.Unsafe.park (родной метод) java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:215) java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.awaitNanos (AbstractQueuedSynchronizer.java:2078) java.util.concurrent.ScheduledThreadPoolExecutor $ DelayedWorkQueue.take (ScheduledThreadPoolExecutor.java:1093) java.util.concurrent.ScheduledThreadPoolExecutor $ DelayedWorkQueue.take (ScheduledThreadPoolExecutor.java:809) java.util. concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:1067) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1127) java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) ява .l ang.Thread.run (Thread.java:745)

Заранее спасибо.

Обновлено: Я проанализировал мои журналы, на самом деле регистратор контекст снова initilising раз Log4jServletContextListener разрушает ..

2016-10-22 13: 49: 36347-локальный стартстопный-2 DEBUG Log4jServletContextListener обеспечения того, чтобы Log4j отключается должным образом. 2016-10-22 13: 49: 36382-локальный стартстопный-2 DEBUG Начиная LoggerContext [имя = bb4719, [email protected]] ...

На самом деле в моем приложении я использую Spring ContextLoaderListner в web.xml, поэтому он может использовать журналирование внутри, уничтожая весенний список.

Thanks

+0

Можете ли вы вставить свойства каталины или просто строки, где указано log4j? – bhantol

+0

Возможно, вы захотите следовать https://issues.apache.org/jira/browse/LOG4J2-1259 – bhantol

+0

Я просмотрел log4j2-1259, я не получил его вывод правильно. – Reetika

ответ

4

Должно работать.

Убедитесь, что вы ввели log4j-web в свою сборку.

Например, как зависимость от maven.

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-web</artifactId> 
</dependency> 

При использовании контейнера сервлетов 3.0 или выше (как в Tomcat 8) никакой дополнительной настройки не требуется (до тех пор, пока вы не опускаем Tomcat для сканирования ServletContainerInitializer в некоторых банках). Для получения дополнительной информации см. Using Log4j 2 in Web Applications.


UPDATE

У меня есть TRIE вляет с вашим настройки (Tomcat 8.0.38, Log4j-2.6.2), и она работает. Чтобы проверить это, если инициализированы Log4jServletContextListener10 и Log4jServletFilter, установите StatusLogger уровень DEBUG в log4j2.xml.

<Configuration monitorInterval="30" status="DEBUG"> 

После этого вы должны будете видеть выпадающие выходы в вашем корневом регистраторе при развертывании приложения.

2016-10-14 20:21:36,762 RMI TCP Connection(2)-127.0.0.1 DEBUG Log4jServletContextListener ensuring that Log4j starts up properly. 
2016-10-14 20:21:36,764 RMI TCP Connection(2)-127.0.0.1 DEBUG Log4jServletFilter initialized. 

Если ваше приложение повторно развернуто, вы должны увидеть следующие строки в своем журнале.

2016-10-14 20:22:00,276 RMI TCP Connection(2)-127.0.0.1 DEBUG Log4jServletFilter destroyed. 
2016-10-14 20:22:00,286 RMI TCP Connection(2)-127.0.0.1 DEBUG Log4jServletContextListener ensuring that Log4j shuts down properly. 

если вы не видите журналы. Вы должны проверить свои каталины.properties, если ваш jarsToSkip содержит любые банки log4j2 или если вы определили параметр isLog4jAutoInitializationDisabled со значением false в вашем web.xml.

<context-param> 
    <param-name>isLog4jAutoInitializationDisabled</param-name> 
    <param-value>false</param-value> 
</context-param> 
+0

@Reetika Примите, если это решит вашу проблему. – bhantol

+0

Я использую контейнер сервлета 3.0. Но все еще сталкиваюсь с проблемой утечки памяти. Я также изменил свойства catalina.properties, как указано в log4j2 doc. – Reetika

+0

@Reetika, расскажите нам, какие версии log4j2 и Tomcat 8 вы используете. –

Смежные вопросы