Взятие дампа кучи на уже сбойной системе - PullRequest
1 голос
/ 27 марта 2012

Мое приложение tomcat упало из-за утечки памяти.Я хочу взять дамп кучи на сбой системы / JVM.Является ли это возможным?Я использую Windows / Tomcat 6 Как?

Ответы [ 4 ]

4 голосов
/ 27 марта 2012

Процесс больше не существует.Так что нет кучи, чтобы свалить.Используйте '-XX: + HeapDumpOnOutOfMemoryError' в следующий раз.

3 голосов
/ 27 марта 2012

Вы можете получить дамп кучи во время выполнения:

jmap -dump: live, format = b, file = heap.dump

1 голос
/ 27 марта 2012

Вы не можете получить дамп кучи для процесса, который больше не выполняется.В следующий раз, когда вы запустите Tomcat, вам сначала нужно будет отредактировать файл в каталоге / bin с именем catalina.sh, чтобы он содержал опции для автоматического выгрузки кучи, если в ней не хватает памяти.

Вам нужно отредактировать переменную JAVA_OPTS, чтобы она содержала нужные вам параметры JVM.Таким образом, в верхней части файла после создания JAVA_OPTS вам нужно выполнить что-то вроде

JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError"

Вы также можете создавать дампы кучи с помощью JConsole, но дляДля этого вам нужно приблизительно знать, когда Tomcat не хватает памяти, чтобы дамп кучи помог вам диагностировать проблему.

1 голос
/ 27 марта 2012

Если ваше приложение не отвечает, но JVM все еще хромает, вы можете попробовать использовать JConsole и запустить дамп кучи. Выполните поиск дампа кучи по этой ссылке

...