2012-05-23 53 views
1

我目前使用tomcat7。我的Web應用程序導致停止計時器內存泄漏。 日誌是:tomcat - 定時器內存泄漏

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. 
我不會在我的web應用程序使用j個 ava.util.Timer

+0

進行線程轉儲。這可能會揭示線程正在做什麼以及它可能已經啓動的地方。 –

回答

2

這並不一定表明您代碼使用java.util.Timer(這是順便說一下在Java EE Web應用程序了極壞的主意,理由提到here)。此Timer也可以作爲您的webapp的/WEB-INF/lib文件夾中提供的任何庫的一部分包含在內。顯然,某些庫在webapp的啓動時自動註冊了ServletContextListenerServletContainerInitializer,其中Timer已創建。

您需要調查它是哪個庫,然後相應地修復/刪除它。提取JAR以檢查附帶的代碼,或逐個刪除它們。一旦找到罪魁禍首,我肯定會向圖書館的維護人員報告,在Java EE webapp中絕對不推薦使用Timer,並且他們必須修復它。

+0

如何查看隨附的代碼? –

+0

@Balusc你怎麼知道某些庫已經自動註冊了ServletContextListener或ServletContainerInitializer? – Pidster

+0

@Pidster:通過檢查JAR中的任何'* .tld','/ META-INF/services/*','web-fragment.xml'文件。或者閱讀JAR文件供應商的文檔。 – BalusC

0

這一個我不太確定。似乎有一個RMI超時定時器,但所有這一切是由Tomcat的一部分,所以它不應該是一個泄漏