Подробный анализ Tomcat Heap в производственной системе

Проанализировав веб-приложение с небольшой нагрузкой, работающее в Tomcat, с использованием консоли JMX, выяснилось, что «PS Old Gen» растет медленно, но постоянно. Он начинается с 200 МБ и растет примерно до 80 МБ/час.

Процессор не проблема, он работает в среднем на 0-1%, но где-то у него есть утечка памяти, поэтому он станет нестабильным через несколько дней после развертывания.

Как узнать, какие объекты размещены в куче? Знаете ли вы какие-нибудь хорошие учебники или инструменты?


person Andreas Petersson    schedule 16.12.2008    source источник
comment
Вы хотите видеть больше информации, чем может предоставить jconsole?   -  person Koekiebox    schedule 15.11.2010


Ответы (6)


Вы можете попробовать jmap, один из Инструменты разработки JDK. Вы можете использовать jhat с выводом на просмотр дампов кучи с помощью веб-браузера.

См. этот ответ для краткости объяснение.

Это происходит довольно часто, поэтому поиск SO для этих инструментов должен найти некоторые альтернативы.

person McDowell    schedule 16.12.2008

Я с успехом использовал инструмент HeapAnalyzer от IBM alphaWorks. Он берет выходные данные из профиля кучи Java, hprof, и анализирует их, чтобы показать вам наиболее вероятные утечки памяти.

person erickson    schedule 16.12.2008

Вы можете использовать профилировщик NetBeans. У него есть 2 режима: запуск профилированного tomcat непосредственно из ide (для локального хоста) или использование удаленного профилирования с предоставленным JAR и некоторыми настройками запуска на сервере.

Я использовал его в проекте для утечки памяти, и это было полезно.

person jberges    schedule 16.12.2008


То, что вы видите, нормально, если вы не можете доказать обратное. Вам не нужно анализировать кучу, когда дополнительное «потребленное пространство» исчезает, когда происходит GC в старом пространстве. В какой-то момент, когда используемое пространство достигнет максимального размера кучи, вы увидите паузу, вызванную используемым вами GC по умолчанию, и после этого используемая память должна сильно уменьшиться. Только если он не выйдет из строя после GC, вам может быть интересно, что все еще держится за эти объекты.

person Fabian Lange    schedule 25.11.2012

JRockit Mission Control может анализировать утечки памяти при подключении к JVM. Не нужно постоянно делать снимки. Это может быть полезно, если у вас есть сервер с большой кучей.

Просто подключите инструмент к JVM, и он предоставит вам таблицу тенденций, в которой вы сможете увидеть, какие типы объектов растут больше всего, а затем вы сможете изучить ссылки на эти объекты. Вы также можете получать трассировки выделений во время работы JVM, чтобы видеть, где в приложении размещены объекты.

Вы можете скачать его здесь бесплатно

person Kire Haglin    schedule 18.12.2008