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?

¿Fue útil?

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.

Creo que hay una herramienta como JProfiler. que 'll muy bien el trabajo con Eclipse

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top