【问题标题】:Tomcat memory leak issue on log4j threadlog4j线程上的Tomcat内存泄漏问题
【发布时间】:2016-10-06 18:20:40
【问题描述】:

我在 log4j v1 中遇到内存泄漏问题。如何解决此内存泄漏问题。 此方法是定期检查我的班级中的 log4j.properties 文件更新。

PropertyConfigutaror.configureAndWatch(time_ms);

但是在关机时tomcat内存泄漏问题来了。日志如下:

2016 年 10 月 6 日 15:13:55.973 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web 应用程序 [myapp] 似乎已经启动了一个名为 [Thread-10] 但未能阻止它。这很可能会创建一个 内存泄漏。线程堆栈跟踪:

java.lang.Thread.sleep(本机方法) org.apache.log4j.helpers.FileWatchdog.run(FileWatchdog.java:103)

提前致谢

【问题讨论】:

  • 是否解决了您的问题。请告知如何

标签: java multithreading memory-leaks log4j


【解决方案1】:

有没有办法让 log4j 在配置文件发生更改时自动重新加载?

是的。 DOMConfigurator 和 PropertyConfigurator 都支持通过 configureAndWatch 方法自动重新加载。有关详细信息,请参阅 API 文档。

因为 configureAndWatch 启动了一个单独的 wathdog 线程,并且由于在 log4j 1.2 中无法停止该线程,因此 configureAndWatch 方法在应用程序被回收的 J2EE 环境中使用是不安全的。 @987654321 @

对于像 Tomcat 这样的不成熟的应用服务器来说,第二个陈述也是正确的。

如果您想在运行时重新加载配置,我建议您更新到 log4j 2。

还可以编写自己的属性文件阅读器并以编程方式设置日志配置。如需更多信息,请参阅Change Log4j properties at runtime

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 2012-05-29
    • 2021-05-23
    • 2021-12-25
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2014-10-29
    • 2013-12-18
    相关资源
    最近更新 更多