2013-07-22 15 views
0

我有一個運行在Tomcat上的Spring Web應用程序。Tomcat內存泄露 - 停止Guava終結者線程

當試圖使用shutdown.sh腳本關閉Tomcat時,java進程並沒有結束,因爲它有一個仍在運行的線程。該catalina.log包含

Jul 22, 2013 2:07:50 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 
SEVERE: The web application [/myapp] appears to have started a thread named [com.google.common.base.internal.Finalizer] but has failed to stop it. This is very likely to create a memory leak. 

顯然BoneCP有一些Guava整合導致此線程被阻塞。有沒有乾淨的或有意的方法來殺死這個線程?

+0

得到pid並殺死它? – happybuddha

+0

我寧願這樣做,沒有額外的命令。 –

回答

1

有一個關於番石榴開放issue對於這個問題 - 這個問題本身是很老的,但如果你查看最新的評論,你會看到其他BoneCP用戶一些建議,以解決此問題

還要檢查這個其他issue而這patch

+0

我看了你的第一個鏈接,但我不知道如何獲得對'FinalizableReferenceQueue'的引用。另外,在我看到的Guava(13.0.1)源代碼中,'FinalizableReferenceQueue'沒有實現'Closeable'。 –

+0

FinalizableReferenceQueue在guava 15.0中實現了Closeable。 BoneCP> = 0.8.0-rc3現在明確調用queue.close()。 – wwadge