Est-il possible de faire une décharge de tas en temps réel avec ibm-jdk pour linux?
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?
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:
- HotSpot de diagnostic MBean
- paramètres requis pour générer Heapdumps
- Utilisation de l'option -Xdump
Cette liste est non exhaustive.
Je pense qu'il est un outil comme JProfiler. ça va bien travailler avec Eclipse