¿Cómo puedo deshabilitar el GC sistémico que ocurre cuando desencadeno un volcado de montón en WebSphere?

Quiero capturar los objetos que se recopilan durante el GC del sistema que se produce cuando genero un volcado de almacenamiento dinámico. ¿Hay alguna manera de deshabilitar ese sistema GC?

preguntado el 02 de enero de 13 a las 19:01

¿Qué JVM estás usando? -

IBM, lo siento, debería haberlo notado. Aunque lo etiqueté como WebSphere... :) -

4 Respuestas

Puede generar un "volcado del sistema" en lugar de un "volcado del montón". No he encontrado ninguna documentación al respecto, pero lo intenté y parece que el "volcado del sistema" no activa el "GC del sistema".

El "volcado del sistema" se puede solicitar con generateSystemDump operación JMX. Si prefieres usar kill -3 comando, entonces probablemente necesitará agregar una variable de entorno a su JVM:

JAVA_DUMP_OPTS=ONDUMP(SYSDUMP)

El "volcado del sistema" debe procesarse con jextract herramienta antes de cargarla en Eclipse MAT. El volcado del sistema también es mucho más grande que el volcado del montón, principalmente porque contiene no solo el árbol de objetos, sino también los datos reales del objeto.

Respondido el 03 de enero de 13 a las 11:01

... y se podrá acceder a la lista de objetos que está buscando a través de "Histograma de objetos inalcanzables" en MAT. - marcin plonka

Gracias, le daré una oportunidad a esto. +1 para referencia MAT. - Greg

@MarcinPłonka, ¿esta operación de generar SystemDump JMX solo es nativa de WebSphere Application Server? - zigimanto

En un JRE de IBM, puede deshabilitar GC explícito agregando -Xdisableexplicitgc como un argumento JVM. Sin embargo basado en este artículo parece que este argumento no ayudará.

Tal vez ayudaría un PMR al soporte de IBM.

Respondido el 03 de enero de 13 a las 10:01

Teniendo en cuenta el punto de acceso, no hay parámetros que influyan en el comportamiento de la máquina virtual al descargar un montón. Por lo general, una colección de GC se activa antes de volcar un montón.

Al menos puede habilitar la impresión de histogramas de clase antes/después de un GC completo; de esta manera, verá qué objetos se recopilaron. (XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC)

También puedes probar -XX:+DisableExplicitGC pero no creo que esto ayude. Cuando recopilo un volcado de pila, siempre noto que se están recopilando algunos objetos.

Respondido el 02 de enero de 13 a las 21:01

Acabo de encontrar esta publicación y pensé en poner mis dos bobs. Puede generar un núcleo del sistema a través de WebSphere Adminconsole: Vaya a Solución de problemas> Volcados y núcleos de Java. Seleccione los servidores desde los que recopilar los volcados. Haga clic en Volcado del sistema para generar un núcleo del sistema.

Tampoco es necesario que extraiga el núcleo del sistema si solo necesita realizar un análisis de memoria en montón en MAT. El núcleo del sistema también tiene datos de diagnóstico mucho más útiles que un volcado de almacenamiento dinámico, la mayoría de las veces puede ver la pila del subproceso que está perdiendo memoria de almacenamiento dinámico.

respondido 26 mar '20, 08:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.