2011-07-27 18 views
8

Estoy usando el MAT para comparar dos vuelcos del montón. He estado tomando un basurero cada día y está creciendo en unos 200 megas cada día. Creo que la fuga está asociada con java.util.zip debido a lo que muestra la tabla y también porque recientemente agregamos un nuevo proceso que comprime y descomprime una gran cantidad de archivos. (Véase la imagen)Necesito ayuda para encontrar mi pérdida de memoria usando MAT

Heap dump histogram compare

En este punto que abra el dominador y se filtró para. Inflater. Eso produjo una gran lista de java.util.zip.Inflater. Ahora quiero ver qué es lo que los mantiene abiertos, así que elegí uno y ejecuté la ruta de acceso a la raíz de la GC, excluyendo las referencias débiles y débiles (ver imagen).

GC Root

Parece que esto tiene que ver con la inflación frasco y nada que ver con mi proceso. En este punto estoy atascado y necesito algunas sugerencias.

EDIT 1

Sean le preguntó sobre el ThreadLocals. Si miras el dominator_tree sin filtro, ves que java.lang.ApplicationShutdownHooks es el 58% del montón. Si amplío algunas de esas entradas, puede ver que parecen estar en ThreadLocalMap. ¿Cómo encontraría lo que los puso allí?

enter image description here

EDIT 2

comentario de Sean me puso sobre la pista correcta. Estoy usando Glassfish v 2.0 y tiene un memory leak. Crea continuamente nuevos LogManagers y los agrega a la colección ApplicationShutdownHooks.

He solucionado el problema abriendo el ApplicationShutdownHooks y eliminando manualmente los objetos de la colección.

+0

¿Todas las rutas de las instancias a la raíz de la GC se ven así? Podría ser que esta no es una muestra representativa. –

+0

Hay 16k instancias por lo que es posible que algunas sean diferentes. He visto algunos y son iguales. ¿Alguien sabe por qué mis imágenes no se muestran? – Preston

+0

Están mostrando bien para mí. –

Respuesta

0

El comentario de Sean me puso en la pista correcta. Estoy usando Glassfish v 2.0 y tiene una pérdida de memoria. Crea continuamente nuevos LogManagers y los agrega a la colección ApplicationShutdownHooks.

He solucionado el problema abriendo el ApplicationShutdownHooks y eliminando manualmente los objetos de la colección.