Normalmente, lo que uso se ParseHeapDump.sh
incluye dentro de Eclipse Memory Analyzer y se describe aquí , y lo hago en uno de nuestros servidores más reforzados (descargue y copie sobre la distribución de Linux .zip, descomprímalo allí). El script de shell necesita menos recursos que analizar el montón desde la GUI, además, puede ejecutarlo en su servidor robusto con más recursos (puede asignar más recursos agregando algo como -vmargs -Xmx40g -XX:-UseGCOverheadLimit
al final de la última línea del script. Por ejemplo, la última línea de ese archivo podría verse así después de la modificación
./MemoryAnalyzer -consolelog -application org.eclipse.mat.api.parse "$@" -vmargs -Xmx40g -XX:-UseGCOverheadLimit
Ejecutarlo como ./path/to/ParseHeapDump.sh ../today_heap_dump/jvm.hprof
Después de que tenga éxito, crea varios archivos de "índice" junto al archivo .hprof.
Después de crear los índices, trato de generar informes a partir de eso y enviar esos informes a mis máquinas locales y tratar de ver si puedo encontrar al culpable solo por eso (no solo los informes, no los índices). Aquí hay un tutorial sobre cómo crear los informes .
Informe de ejemplo:
./ParseHeapDump.sh ../today_heap_dump/jvm.hprof org.eclipse.mat.api:suspects
Otras opciones de informe:
org.eclipse.mat.api:overview
y org.eclipse.mat.api:top_components
Si esos informes no son suficientes y necesito un poco más de investigación (es decir, digamos a través de oql), hago un scp de los índices y el archivo hprof en mi máquina local y luego abro el volcado de pila (con los índices en el mismo directorio el volcado de pila) con mi GUI Eclipse MAT. A partir de ahí, no necesita demasiada memoria para ejecutarse.
EDITAR:
solo me gustó agregar dos notas:
- Hasta donde yo sé, solo la generación de índices es la parte de memoria intensiva de Eclipse MAT. Una vez que tenga los índices, la mayor parte de su procesamiento de Eclipse MAT no necesitaría tanta memoria.
- Hacer esto en un script de shell significa que puedo hacerlo en un servidor sin cabeza (y normalmente lo hago también en un servidor sin cabeza, porque normalmente son los más poderosos). Y si tiene un servidor que puede generar un volcado de montón de ese tamaño, lo más probable es que tenga otro servidor que pueda procesar tanto volcado de montón.
ArrayIndexOutOfBoundsException
características en al menos dos errores . Lo digo porque no ha informado un OOME al ejecutar MAT, que tiene una solución diferente .