Как найти утечку классного загрузчика с помощью бесплатных инструментов?
Я изучаю утечку памяти в приложении Tomcat/ Spring/Hibernate, которое вызывает страшную ошибку "из-подмены" после нескольких повторений. Я загрузил бесплатную версию plumbr, которая подтверждает, что у меня есть утечка класса, но, к сожалению, я не могу позволить себе получить 499 долларов США, чтобы получить подробный отчет. Есть ли бесплатный инструмент, который может выполнить эквивалентный анализ и сказать мне, где его искать? Или какая-то другая общая причина таких утечек, которые я могу исследовать?
Шаги, которые я сделал до сих пор:
- Убедитесь, что мой JDBC-драйвер не зарегистрирован при отключении контекста.
- Вручную отключить драйвер MySQL. AbandonedConnectionCleanupThread (за утечка Tomcat Guice/JDBC)
Что еще может вызвать утечку?
Ответы
Ответ 1
Вы можете использовать оценочную версию JProfiler для исследования утечки загрузчика класса. Перейдите в пробник загрузчика классов, выберите один из загрузчиков класса утечки и покажите их в хайпер-ходоке, где вы можете исследовать сильные ссылки на классы, загруженные загрузчиком классов.
Существует экран который показывает вам, как это сделать.
Отказ от ответственности: Моя компания разрабатывает JProfiler.
Ответ 2
Я обнаружил, что Eclipse Memory Analysis Tools работает достаточно хорошо. Я установил свой сервер для создания кучи кучи и использовал MAT (примерно следуя руководству здесь), чтобы найти все загрузчики классов. Кажется, что релевантно org.apache.catalina.loader.WebappClassLoader
, и, перечисляя их корни GC, я легко мог узнать, что моя проблема вызвана java.util.logging.Level
, на которую косвенно ссылались через org.jboss.logging.JDKLevel
.
Теперь мне просто нужно выяснить, как предотвратить JBoss Logging, делая это...