2008-09-20 10 views
6

Estoy trabajando en una aplicación grande (300K LOC) que está causando una pérdida de memoria en Sun 1.6 JVM (1.6_05). El perfil de Java no muestra fugas. ¿Hay algún diagnóstico disponible de la JVM que pueda detectar la causa de la fuga?
No he podido crear un caso de prueba Java simple y aislado. ¿Es la única forma de resolver esto usando un analizador de montón C en la JVM?
La aplicación crea un conjunto de sockets y realiza una cantidad significativa de E/S de red.¿Cómo se diagnostica una fuga en la memoria C causada por un programa Java?

Respuesta

2

Algunos perfiladores como profiler4j pueden mostrar la memoria gestionada y la no gestionada (curva viva). Luego puede ver si tiene una fuga y cuándo ocurre la fuga. Pero no encuentras más información.

Después de esto hay 2 posibles soluciones:

  1. Puede con la curva vivo aislar el problema y crear una prueba más simple hasta que tenga a encontrar la causa del problema.
  2. usted busca el código de los problemas típicos como:
    1. Las instancias de la clase Thread que nunca se inicia.
    2. imágenes o gráficos que no son nunca disponer
    3. Objetos puente ODBC que no están cerca
0

Me encanta valgrind (http://valgrind.org/), si se está ejecutando en un sistema que soporta. Realmente rocas!

Cuestiones relacionadas