La mayoría de las veces, en las aplicaciones empresariales, el montón de Java dado es mayor que el tamaño ideal de un máximo de 12 a 16 GB. Me ha resultado difícil hacer que el generador de perfiles de NetBeans funcione directamente en estas grandes aplicaciones de Java.
Pero generalmente esto no es necesario. Puede usar la utilidad jmap que viene con jdk para realizar un volcado de almacenamiento dinámico "en vivo", es decir, jmap volcará el almacenamiento dinámico después de ejecutar GC. Realice alguna operación en la aplicación, espere hasta que se complete la operación, luego realice otro volcado de pila "en vivo". Use herramientas como Eclipse MAT para cargar los heapdumps, ordenar en el histograma, ver qué objetos han aumentado o cuáles son los más altos, esto daría una pista.
su proceeuser
/bin/jmap -dump:live,format=b,file=/tmp/2930javaheap.hrpof 2930(pid of process)
Solo hay un problema con este enfoque; Los grandes volcados de almacenamiento dinámico, incluso con la opción en vivo, pueden ser demasiado grandes para transferir a la vuelta de desarrollo, y pueden necesitar una máquina con suficiente memoria / RAM para abrir.
Ahí es donde aparece el histograma de clase. Puede volcar un histograma de clase en vivo con la herramienta jmap. Esto le dará solo el histograma de clase de uso de memoria. Básicamente no tendrá la información para encadenar la referencia. Por ejemplo, puede poner una matriz de caracteres en la parte superior. Y la clase String en algún lugar debajo. Tienes que dibujar la conexión tú mismo.
jdk/jdk1.6.0_38/bin/jmap -histo:live 60030 > /tmp/60030istolive1330.txt
En lugar de realizar dos volcados de almacenamiento dinámico, tome dos histogramas de clase, como se describe anteriormente; Luego compare los histogramas de clase y vea las clases que están aumentando. Vea si puede relacionar las clases Java con sus clases de aplicación. Esto le dará una muy buena pista. Aquí hay un script de pitones que puede ayudarlo a comparar dos volcados de histograma jmap. histogramparser.py
Finalmente, herramientas como JConolse y VisualVm son esenciales para ver el crecimiento de la memoria con el tiempo y ver si hay una pérdida de memoria. Finalmente, a veces su problema puede no ser una pérdida de memoria, sino un uso elevado de la memoria. Para esto, active el registro de GC; use un GC de compactación más avanzado y nuevo como G1GC; y puede usar herramientas jdk como jstat para ver el comportamiento de GC en vivo
jstat -gccause pid <optional time interval>
Otras referencias a google para -jhat, jmap, GC completo, asignación enorme, G1GC