¿Hay una manera de hacer un volcado del montón en vivo con IBM-JDK para Linux?
Pregunta
Yo sé que es posible volcar cuando un montón OutOfMemoryException se está produciendo en esta JVM, pero es posible pedir a un vertedero en directo con herramientas como jmap o jconsole?
Solución 3
OK, voy a responder finalmente a mí mismo:. La aplicación tiene una interfaz de administración remota, así que voy a poner en práctica un nuevo comando que está llamando el método com.ibm.jvm.Dump.HeapDump()
Otros consejos
Usted necesita ser consciente de que hay vertederos "sistema" (básicamente archivos del núcleo del sistema operativo) y "montón" alias vuelcos de almacenamiento dinámico portátil (PHD) . Los posteriores son menos útiles, ya que no contienen datos reales. Son hower activada por defecto.
En AIX o Linux Normalmente se instalarán -Xdump:system
(abreviatura de -Xdump:system:events=gpf+user
) para permitir kill -3 <pid>
para desencadenar un volcado del montón.
Por cierto, se puede con las opciones por defecto utilizar kill -ABRT <pid>
. Sin embargo, esto dará por terminado su JVM.
Ejecutar java -Xdump:what
para ver sus valores predeterminados, como:
> /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))
Con convertido en el sistema de vertederos:
> /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
----------------------
...
No se olvide de ejecutar jre/bin/jextract
en el núcleo. * .dmp los archivos.
Usted tiene algunas opciones:
Esta lista no es exhaustiva.
Creo que hay una herramienta como JProfiler. que 'll muy bien el trabajo con Eclipse