способы как получить дамп кучи от запущенного tomcat 7

Я пробовал этот Получить кучу дампа на JVM от Tomcat 6 Но у меня это не работает. Есть ли другие способы получить дамп кучи с сервера tomcat? Заранее спасибо!


person emdhie    schedule 27.11.2013    source источник
comment
С какой проблемой вы столкнулись, пытаясь сделать дамп кучи?   -  person Taky    schedule 27.11.2013
comment
Вы связываете просто дамп кучи, когда JVM мертв из-за нехватки памяти. Это не позволяет вам делать кучу дампа, когда захотите. Но для вас это все равно очень полезный вариант.   -  person Taky    schedule 27.11.2013


Ответы (3)


Самый простой способ получить дамп кучи - использовать jmap . На машине с java-процессом выполните команду jmap. Пример использования:

jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842

используйте jps, чтобы узнать идентификатор Java Pid.


Также вы можете сделать дамп кучи через jvisualvm. Вы можете подключиться к удаленному компьютеру через jmx или jstatd. Вы можете сделать heapdump и сохранить его на удаленной машине.

Для анализа кучи могу посоветовать вам: MAT. Очень мощный инструмент, позволяющий быстро разобраться в проблемах. Вы можете найти здесь хорошая инро в ВСУ.


Если вы не хотите останавливать приложение на долгое время, вы можете сделать бинарный дамп (Вы можете использовать gcore или gdb). И вы можете использовать jmap для анализа дампа gdb. Дополнительную информацию вы можете прочитать в атласском блоге. Остерегайтесь некоторых проблемы .

person Taky    schedule 27.11.2013
comment
Возможно, вам придется использовать sudo - person th3morg; 17.06.2015

Другой способ, помимо кнопки "Дамп кучи" jvisualvm, - через JMX-интерфейс. Таким образом вы даже можете указать, где хранить дамп.

подключиться к JMX-серверу Tomcat с помощью jconsole или jvisualvm с JMX-плагином. Потом добрались до com.sun.management -> HotSpotDiagnotic -> Operations. Рядом с dumpHeap введите два параметра. Из документации oracle (см. здесь ):

Параметры:

outputFile - системно-зависимое имя файла

live - при true выгружать только живые объекты, т.е. объекты, доступные для других

Затем нажмите dumpHeap и наблюдайте, как ВМ какое-то время зависает во время записи дампа.

person piet.t    schedule 27.11.2013

Я рекомендую визуальную виртуальную машину http://visualvm.java.net/. Это универсальный инструмент, который может подключаться to tomcat, создать и прочитать дамп кучи, создать дамп потока, процессора и сэмплера памяти.

Если вы используете новый jdk 1.7, VisualVM уже упакован в вашу папку jdk.

person Alireza Fattahi    schedule 06.07.2015