Есть ли способ сделать живой дамп кучи с ibm-jdk для Linux? - PullRequest
6 голосов
/ 10 декабря 2010

Я знаю, что можно создать дамп кучи, когда на этой JVM возникает исключение OutOfMemoryException, но можно ли задать динамический дамп с помощью таких инструментов, как jmap или jconsole?

Ответы [ 4 ]

6 голосов
/ 01 октября 2012

Вы должны знать, что существуют "системные" дампы (в основном файлы ядра ОС) и "куча", также известные как переносимые дампы кучи (PHD) .Последние менее полезны, так как не содержат фактических данных.Они включены по умолчанию.

В AIX или Linux Обычно вы устанавливаете -Xdump:system (сокращение от -Xdump:system:events=gpf+user), чтобы kill -3 <pid> мог запускать дамп кучи.

Кстати, вы можете использовать параметры по умолчаниюиспользуйте kill -ABRT <pid>.Однако это прекратит работу вашей JVM.

Запустите java -Xdump:what, чтобы увидеть настройки по умолчанию, например:

> /usr/java6/bin/java -Xdump:what -version

Registered dump agents
----------------------
-Xdump:system:
    events=gpf+abort+traceassert,
    label=/home/u0002824/core.%Y%m%d.%H%M%S.%pid.%seq.dmp,
    range=1..0,
    priority=999,
    request=serial
----------------------
...
java version "1.6.0"
Java(TM) SE Runtime Environment (build pap3260sr9fp2-20110627_03(SR9 FP2))

При включенных системных дампах:

> /usr/java6/bin/java -Xdump:system -Xdump:what -version

Registered dump agents
----------------------
-Xdump:system:
    events=gpf+user+abort+traceassert,
    label=/home/u0002824/core.%Y%m%d.%H%M%S.%pid.%seq.dmp,
    range=1..0,
    priority=999,
    request=serial
----------------------
-Xdump:heap:
    events=systhrow,
    filter=java/lang/OutOfMemoryError,
    label=/home/u0002824/heapdump.%Y%m%d.%H%M%S.%pid.%seq.phd,
    range=1..4,
    priority=500,
    request=exclusive+compact+prepwalk,
    opts=PHD
----------------------
-Xdump:java:
    events=gpf+user+abort+traceassert,
    label=/home/u0002824/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt,
    range=1..0,
    priority=400,
    request=exclusive+preempt
----------------------
-Xdump:java:
    events=systhrow,
    filter=java/lang/OutOfMemoryError,
    label=/home/u0002824/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt,
    range=1..4,
    priority=400,
    request=exclusive+preempt
----------------------
-Xdump:snap:
    events=gpf+abort+traceassert,
    label=/home/u0002824/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc,
    range=1..0,
    priority=300,
    request=serial
----------------------
-Xdump:snap:
    events=systhrow,
    filter=java/lang/OutOfMemoryError,
    label=/home/u0002824/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc,
    range=1..4,
    priority=300,
    request=serial
----------------------
...

Незабудьте запустить jre/bin/jextract на ядре . * .dmp файлы.

4 голосов
/ 10 декабря 2010

У вас есть несколько вариантов:

Этот список не является исчерпывающим.

3 голосов
/ 12 декабря 2010

ОК, наконец-то я отвечу себе: приложение имеет интерфейс удаленного администратора, поэтому я реализую новую команду, которая вызывает метод com.ibm.jvm.Dump.HeapDump().

0 голосов
/ 10 декабря 2010

Я думаю, что есть один инструмент, такой как JProfiler.это будет хорошо работать с Eclipse

...