java - ¿Cómo encontrar la pérdida del cargador de clases con herramientas gratuitas?
spring hibernate (2)
Puede usar la versión de evaluación de JProfiler para investigar la fuga del cargador de clases. Diríjase a la sonda del cargador de clases, seleccione uno de los cargadores de clase con fugas y muéstreselos en el "heap walker" donde puede investigar referencias fuertes a las clases que cargó el cargador de clases.
Hay un molde de pantalla que te muestra cómo hacer esto.
Descargo de responsabilidad: Mi empresa desarrolla JProfiler.
Estoy investigando una pérdida de memoria en una aplicación Tomcat / Spring / Hibernate que está causando el temido error "out of permgen" después de algunos redplugs. He descargado la versión gratuita de plumbr, que confirma que tengo una pérdida de cargador de clase, pero desafortunadamente no puedo pagar los $ 499 para obtener el informe detallado. ¿Hay alguna herramienta gratuita que pueda realizar un análisis equivalente y decirme dónde buscarla? ¿O alguna otra causa común de tales filtraciones que puedo investigar?
Pasos que he tomado hasta ahora:
- Asegúrese de que mi controlador JDBC no esté registrado en el momento del cierre del contexto
- Cierre manualmente el AbandonedConnectionCleanupThread del controlador MySQL (por Tomcat Guice / JDBC Memory Leak )
¿Qué más podría estar causando la fuga?
Descubrí que las herramientas de análisis de memoria de Eclipse funcionaban razonablemente bien. Configuré mi servidor para producir un volcado de pila y usé MAT (aproximadamente siguiendo la guía aquí ) para encontrar todos los cargadores de clase. Parece que el más relevante es org.apache.catalina.loader.WebappClassLoader
, y al enumerar sus raíces de GC, pude descubrir fácilmente que mi problema era causado por java.util.logging.Level
que se hizo referencia indirectamente a través de una org.jboss.logging.JDKLevel
.
Ahora solo necesito descubrir cómo evitar que JBoss Logging haga esto ...