platzi introduccion gratis cursos curso basicos basico aprender java memory garbage-collection jconsole

introduccion - java basico platzi



Estrategias para el diagnóstico de problemas de memoria de Java (5)

La última versión de Sun JDK incluye VisualVM, que es esencialmente el perfilador de Netbeans en sí mismo. Funciona realmente bien.

Me han encargado la depuración de una aplicación Java (J2SE) que después de un período de actividad comienza a arrojar excepciones OutOfMemory. Soy nuevo en Java, pero tengo experiencia en programación. Estoy interesado en obtener sus opiniones sobre el buen enfoque para diagnosticar un problema como este.

Hasta aquí he empleado a JConsole para obtener una idea de lo que está pasando. Tengo la corazonada de que hay un objeto que no se está liberando correctamente y, por lo tanto, no se limpia durante la recolección de basura.

¿Hay alguna herramienta que pueda utilizar para obtener una imagen del ecosistema de objetos? ¿Dónde comenzarías?


También puede agregar un "UnhandledExceptionHandler" al hilo de su aplicación. Esto capturará la excepción ''no detectada'', como un error de falta de memoria, y al menos tendrá una idea de dónde se emitió la excepción. Por lo general, este no era el problema sino el "nuevo" que no podía ser satisfecho. Como regla, siempre agrego el UnhandledExceptionHandler a un subproceso si no hay nada más para agregar el registro.


Pruebe el Analizador de memoria Eclipse , o cualquier otra herramienta que pueda procesar un volcado de almacenamiento en java, y luego ejecute su aplicación con la aleta que genera un volcado de almacenamiento dinámico cuando se quede sin memoria.

Luego, analiza el volcado del montón y busca recuentos de objetos sospechosamente altos.

Consulte este artículo para obtener más información sobre el volcado de pila .

EDITAR: Además, tenga en cuenta que su aplicación puede requerir legítimamente más memoria de la que inicialmente pensó. Puede intentar aumentar la asignación de memoria máxima y mínima de java a algo significativamente más grande primero y ver si su aplicación se ejecuta indefinidamente o simplemente va un poco más allá.



http://www.yourkit.com/download/index.jsp es la única herramienta que necesitará. Puede tomar instantáneas en (1) la hora de inicio de la aplicación, y (2) después de ejecutar la aplicación por N cantidad de tiempo, y luego comparar las instantáneas para ver dónde se asigna la memoria. También tomará una instantánea en OutOfMemoryError para que pueda comparar esta instantánea con (1).

Por ejemplo, el último proyecto que tuve que resolver arrojó excepciones OutOfMemoryError, y después de encender YourKit me di cuenta de que la mayoría de la memoria se estaba asignando a alguna clase de ehcache "LFU", el punto es que especificamos cargas de cierto POJO para ser almacenado en memoria caché, pero no especificando suficiente -Xms y -Xmx (asignación de memoria JVM inicial y máxima).

También utilicé vmstat de Linux, por ejemplo, algunas plataformas Linux simplemente no tienen suficiente intercambio activado, o no asignan bloques contiguos de memoria, y luego está jstat (incluido con JDK).

ACTUALIZAR ver https://.com/questions/14762/please-recommend-a-java-profiler