java - not - Las diversas opciones para resolver problemas de PermGen
memory leak java code (2)
Desafortunadamente, las respuestas son:
- Sí
- Esas opciones de VM solo pospondrán el problema.
El problema básico es que el GC no recogerá un objeto de gran alcance. Necesitará averiguar por qué esos cargadores antiguos de la clase de aplicación aún se pueden alcanzar después de volver a desplegar ... y arreglar la fuga.
Alternativamente, renuncie a la redistribución en caliente en sus servidores de producción, o reinicie el contenedor web (por ejemplo, JBoss) con más frecuencia.
Estoy buscando en las diversas opciones en torno a la recolección de basura en una máquina virtual Java 6 18 y me gustaría algunas sugerencias.
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.
Por lo que puedo ver , lo siguiente es correcto:
- Las opciones de VM por sí solas no resolverán este problema , solo lo pospondrán.
- La única manera confiable de solucionar este problema es corregir los errores de codificación en el propio servidor de aplicaciones (poco probable) o en el código (nuestro código o bibliotecas de terceros) que se está ejecutando 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 como resultado de esto:
- ¿Es correcto lo anterior?
- ¿Dónde
CMSClassUnloadingEnabled
opciones de máquina virtualCMSClassUnloadingEnabled
yCMSPermGenSweepingEnabled
? De lo que puedo ver,CMSClassUnloadingEnabled
reemplaza o implícitamente habilitaCMSPermGenSweepingEnabled
. ¿Alguno de ellos ayuda con el problema anterior?
Lectura larga pero buena: http://victor-jan.blogspot.com/2010/05/classloader-leaks-dreaded.html En resumen, es solucionable. No es fácil, pero puede resolverse.