2010-07-26 13 views
9

Estoy buscando en las diversas opciones en torno a la recolección de basura en una VM Java 6 18 y me gustaría algunas sugerencias.Las diversas opciones para resolver problemas de PermGen

Ejecutamos nuestra aplicación en JBoss, y ocasionalmente aparecen los infames errores de PermGen durante las reubicaciones. Existe una gran cantidad de información contradictoria y obsoleta en Internet sobre la mejor manera de resolver o mitigar este problema.

De what I can see, lo siguiente es cierto:

  • opciones VM en su propio no van a resolver este problema, sólo se posponga.
  • La única manera confiable de solucionar este problema es corregir los errores de codificación en el propio servidor de aplicaciones (improbable) o el código (nuestro código o bibliotecas de terceros) que se ejecuta en el servidor de aplicaciones (más probable). El llenado de Permgen a menudo es el resultado de referencias de objetos cargados por el cargador de clases de la aplicación a objetos cargados por el cargador de clases del Servidor de aplicaciones, evitando así la recolección de basura del cargador de clases de la aplicación.

Tengo dos preguntas que resultan de esto:

  1. Está por encima de la correcta?
  2. ¿Dónde entran las opciones de VM CMSClassUnloadingEnabled y CMSPermGenSweepingEnabled? De lo que puedo ver CMSClassUnloadingEnabled reemplaza o implícitamente habilita CMSPermGenSweepingEnabled. ¿Alguno de ellos ayuda con el problema anterior?

Respuesta

6

Por desgracia, las respuestas son:

  1. Esas opciones VM sólo posponer el problema.

El problema básico es que el GC no recogerá un objeto de difícil acceso. Necesitará averiguar por qué esos cargadores antiguos de la clase de la aplicación todavía se pueden alcanzar después de volver a desplegar ... y arreglar la fuga.

O bien, renuncie al redespliegue en caliente en sus servidores de producción o reinicie el contenedor web (por ejemplo, JBoss) con más frecuencia.

+0

+1 en la desactivación de implementación en caliente en los servidores de producción. En realidad, tiendo a hacer esto para todo menos para los entornos de estaciones de trabajo de desarrolladores. –

Cuestiones relacionadas