Question

Je sais qu'il est possible de jeter tas lorsqu'un OutOfMemoryException est INTERVENUES sur cette machine virtuelle Java, mais est-il possible de demander une décharge en temps réel avec des outils tels que jmap ou jconsole?

Était-ce utile?

La solution 3

OK, je vais enfin répondre à moi-même: l'application dispose d'une interface d'administration à distance, donc je vais mettre en œuvre une nouvelle commande qui appelle la méthode com.ibm.jvm.Dump.HeapDump()

.

Autres conseils

Vous devez être conscient qu'il ya "système" décharges (essentiellement des fichiers de base OS) et "tas" alias heap dumps portables (PHD) . Les plus tardifs sont moins car ils ne USEFULL contiennent pas de données réelles. Ils sont hower activés par défaut.

Sous AIX ou Linux En général, vous allez configurer -Xdump:system (abréviation de -Xdump:system:events=gpf+user) pour permettre kill -3 <pid> de déclencher une décharge de tas.

BTW, vous pouvez avec les options par défaut utiliser kill -ABRT <pid>. Cependant, cela mettra fin à votre machine virtuelle Java.

Exécuter java -Xdump:what pour voir vos paramètres par défaut, comme:

> /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))

Avec activée vidages système:

> /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
----------------------
...

Ne pas oublier de courir jre/bin/jextract sur le noyau. * .dmp fichiers.

Vous avez quelques options:

Cette liste est non exhaustive.

Je pense qu'il est un outil comme JProfiler. ça va bien travailler avec Eclipse

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top