2011-02-08 12 views
6

Estoy tratando de determinar si tengo o no una pérdida de memoria en mi aplicación web. Estoy usando VisualVM y JMeter para cargar la prueba y ver el montón.Analizador de memoria Eclipse: informe de sospecha de fuga no apunta a MIS clases, ¿por qué?

He guardado un volcado de heap en el archivo y he descargado Eclipse Memory Analyzer ayer ... después de mucha frustración con VisualVM, pensé que Eclipse detectaría la fuga, si la hubiera, mejor que VisualVM.

Abrí el archivo Heap en Eclipse y ejecuté lo que ellos llaman un Informe de Sospechosos de Fugas. Pensé que apuntaría a una clase particular en mi aplicación web, pero no es así. Así que no tengo ni idea de cómo usar la información que se proporciona para averiguar dónde está el sospechoso de fugas en una clase particular de mina.

Aquí están los resultados del Informe de fuga de fuga para uno de mis archivos de volcado de almacenamiento dinámico.

 
One instance of "org.apache.catalina.session.StandardManager" loaded by "org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0" occupies 16,977,376 (48.54%) bytes. The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "". 


Keywords 
org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0 
org.apache.catalina.session.StandardManager 
java.util.concurrent.ConcurrentHashMap$Segment[] 

El resto de los detalles en el informe se muestran en la imagen adjunta. Espero que la imagen se pueda expandir para ver más de cerca ... enter image description here

Sé que se supone que Eclipse es un buen software. Este es mi último intento de usar algo como esto para encontrar una pérdida de memoria. Solo tengo un conocimiento muy, muy limitado sobre CÓMO se puede usar este software. Las páginas de tutoriales y ayuda describen cosas como si supiera qué hacer después de unos pocos clics ... Necesito más ayuda que eso.

Respuesta

3

Aunque no tengo experiencia con el uso de Eclipse para buscar fugas, primero me gustaría formular una pregunta: ¿Qué tan seguro está de que tiene una pérdida de memoria? De su pregunta, no parece que esté seguro de tener una fuga, pero está probando para ver si tiene una. La forma más sencilla de probar eso sería iniciar su aplicación, observar cuánta memoria está consumiendo, hacer que JMeter lo active continuamente durante 24 horas y ver cuánta memoria está consumiendo (probablemente después de ejecutar GC). Si su aplicación está consumiendo una gran cantidad de memoria, o ha muerto a causa de OutOfMemoryError, entonces tiene una pérdida de memoria.

Si encuentra que realmente tiene una pérdida de memoria, entonces primero le sugiero que ejecute su aplicación a través de FindBugs para ver si puede encontrar las pérdidas de memoria a través de un análisis estático rápido. Si eso no funciona, entonces this article (aunque es bastante antiguo) puede ayudarlo a comprender los resultados que le proporciona Eclipse.

Cuestiones relacionadas