2013-07-22 3 views
0

У меня есть веб-приложение Spring, работающее на Tomcat.Утечка памяти Tomcat - Остановить резьбу финализатора Guava

При попытке завершить работу Tomcat с помощью сценария shutdown.sh процесс 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 реализует Closeable в guava 15.0. BoneCP> = 0.8.0-rc3 вызывает queue.close() явно в любом случае. – wwadge