Я пробовал этот Получить кучу дампа на JVM от Tomcat 6 Но у меня это не работает. Есть ли другие способы получить дамп кучи с сервера tomcat? Заранее спасибо!
способы как получить дамп кучи от запущенного tomcat 7
Ответы (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. Дополнительную информацию вы можете прочитать в атласском блоге. Остерегайтесь некоторых проблемы .
Другой способ, помимо кнопки "Дамп кучи" jvisualvm, - через JMX-интерфейс. Таким образом вы даже можете указать, где хранить дамп.
подключиться к JMX-серверу Tomcat с помощью jconsole или jvisualvm с JMX-плагином. Потом добрались до com.sun.management
-> HotSpotDiagnotic
-> Operations
. Рядом с dumpHeap
введите два параметра. Из документации oracle (см. здесь ):
Параметры:
outputFile - системно-зависимое имя файла
live - при true выгружать только живые объекты, т.е. объекты, доступные для других
Затем нажмите dumpHeap
и наблюдайте, как ВМ какое-то время зависает во время записи дампа.
Я рекомендую визуальную виртуальную машину http://visualvm.java.net/. Это универсальный инструмент, который может подключаться to tomcat, создать и прочитать дамп кучи, создать дамп потока, процессора и сэмплера памяти.
Если вы используете новый jdk 1.7, VisualVM уже упакован в вашу папку jdk.