java - Cargando una gran hprof en jhat
memory-leaks jvm (4)
Tengo un archivo Hprof de 6.5GB que fue volcado por una JVM de 64 bits usando la opción -XX:-HeapDumpOnOutOfMemoryError
. Lo tengo sentado en una máquina de 16GB de 64 bits, y estoy tratando de ponerlo en jhat, pero sigue quedando sin memoria. He intentado pasar jvm args para la configuración mínima, pero rechaza cualquier mínimo, y parece que se queda sin memoria antes de alcanzar el máximo.
Parece un poco tonto que un JVM sin memoria descargue un montón tan grande que no se pueda cargar en una caja con el doble de RAM. ¿Hay alguna forma de poner esto en funcionamiento, o posiblemente amortizar el análisis?
¿Qué banderas estás pasando a jhat? Asegúrese de estar en el modo de 64 bits y de que está configurando el tamaño del montón lo suficientemente grande.
Me gustaría echar un vistazo al analizador de memoria eclipse . Esta herramienta es excelente, y he visto varios montones de Gigantes con esta herramienta. Lo bueno de la herramienta es que crea índices en el volcado por lo que no está todo en la memoria a la vez.
Tuve que cargar un archivo hprof de 11 GB y no pude con el analizador de memoria Eclipse. Lo que terminé haciendo fue escribir un programa para reducir el tamaño del archivo hprof eliminando al azar la información de la instancia. Una vez que obtuve el tamaño del archivo hprof a 1 GB, pude abrirlo con el analizador de memoria Eclipse y obtener una pista de lo que estaba causando la pérdida de memoria.
Utilice el equivalente de jhat -J-d64 -J-mx16g myheap.hprof
como un comando para iniciar jhat, es decir, esto iniciará jhat en modo de 64 bits con un tamaño máximo de 16 gigabytes.
Si la JVM en su plataforma se establece de manera predeterminada en la operación en modo de 64 bits, entonces la opción -J-d64
debería ser innecesaria.