我目前正在使用tomcat7。我的Web应用程序在停止时导致Timer内存泄漏。 日志是:
SEVERE: A web application appears to have started a TimerThread
named [Timer-5] via the java.util.Timer API but has failed to stop it.
To prevent a memory leak, the timer (and hence the associated thread)
has been forcibly cancelled.
我没有在我的网络应用中使用j ava.util.Timer
。
答案 0 :(得分:2)
这并不一定表明您的代码正在使用java.util.Timer
(这在Java EE webapp中是一个非常糟糕的主意,原因提到here )。此Timer
也可以作为webapp的/WEB-INF/lib
文件夹中提供的任何库的一部分包含在内。显然,某些图书馆已在webapp的启动时自动注册ServletContextListener
或ServletContainerInitializer
,其中Timer
已创建。
您需要调查它是哪个库,然后相应地修复/删除它。提取JAR以检查附带的代码,或逐个删除它们。一旦找到罪魁祸首,我肯定会向图书馆的维护人员报告,在Java EE webapp中绝对不建议使用Timer
并且他们必须修复它。
答案 1 :(得分:0)
这个我不太确定。似乎有一个RMI超时计时器,但所有这些都是Tomcat的一部分,所以它不应该是泄漏
答案 2 :(得分:0)
在tomcat wiki中有一个解释(种类)和指向此bug in commons-pool的链接。
在tomcat> 6.0.27
中,计时器停止是可选的