This is an old revision of the document!
Table of Contents
HeapDump
Hacer un heapdump en caliente. Para la JVM y el servidor de aplicaciones no responde a peticiones:
jmap -dump:format=b,file=dump.bin <pid>
Añadir el siguiente parámetro para que haga un heapdump cuando hay un out of memory OOM:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/weblogic/dumps
Se puede añadir en caliente. Primero miramos si lo tiene activado. Nos tenemos que fijar en el sigo - + delante de Heap:
# jinfo -flag HeapDumpOnOutOfMemoryError <PID> -XX:-HeapDumpOnOutOfMemoryError
En este caso tiene un signo - que quiere decir que no lo tiene activado. Lo activamos poniendo el signo +:
# jinfo -flag +HeapDumpOnOutOfMemoryError <PID>
Comprobamos que lo tiene activado:
# jinfo -flag HeapDumpOnOutOfMemoryError <PID> -XX:+HeapDumpOnOutOfMemoryError
Generar Heap Dump
Con la aplicación de Hello World y una instancia de -Xms128m -Xmx128m de weblogic, lanzamos un test de Jmeter de 100 Threads con un Loop Count de 10.000 por ejemplo. A mi me ha generado el HeapDump con formato: jrockit_<PID>.hprof
Analizar
Eclipse Memory Analizer
./MemoryAnalyzer
Te hace un pequeño informe de sospechosos de memory leaks:
One instance of "weblogic.servlet.internal.WebAppServletContext" loaded by "sun.misc.Launcher$AppClassLoader @ 0xe1e7f018" occupies 15,153,312 (13.88%) bytes. The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$HashEntry[]" loaded by "<system class loader>".
Heap Analyzer (IBM)
java -jar ha447.jar
Saca un árbol de los sospechosos de memory leak