2013-10-22 50 views
1

所有: 這裏是我的問題:當我使用shundown.bat關閉Tomcat的,但它失敗了,這裏也有日誌:Tomcat關閉內存泄漏,Java線程不能停止

Severe: The web application [/shop] appears to have started a thread named [ConnectionStateManager-0] but has failed to stop it. This is very likely to create a memory leak. 

2013-10-22 11:38:10 org.apache.catalina.loader.WebappClassLoader clearReferences 

Severe: The web application [/shop] appears to have started a thread named [CuratorFramework-0] but has failed to stop it. This is very likely to create a memory leak. 

從日誌我們可以知道它可能是一些線程無法停止,並可能導致memeory泄漏;

劑量任何人看到面前這個還是有人可以給一些soultions,謝謝

回答

1

好吧,如果你要關閉Tomcat的,它並不重要,如果某個線程不會停止。一旦java進程結束,每個線程都會死掉,內存將被釋放。

只要注意java進程沒有掛起,也許你可以在shutdown.bat中添加kill規則,調用-force(參考tomcat手冊,我沒有Windows意識到),或者只是檢查它來自您的任務管理器。

希望得到它

P.S. 因爲我記得我的環境中總是有這些日誌行,但我從來沒有遇到任何問題。

+0

看來tomcat不會殺死webapps啓動的守護進程線程,我們需要重寫ServletContextListener'contextDestroyed(ServletContextEventarg0)方法來停止守護進程線程。這個例外不會影響我們,但無論如何這是一個錯誤或錯誤,我想解決它。 – Winston

1

如果您將該問題指向Shop Servelet的創建者,那麼只有他/她確實知道這可能是最好的。

一個Servlet應該是無狀態的,但它不一定是。但是,如果你擺脫了無狀態系統(在這種情況下通過保持一個特殊的線程),TomCat不能再確保清理工作將正確完成,因此警告。因此,這可以是一個問題,但不必,如果編碼正確。