outofmemoryerror error java tomcat out-of-memory permgen redeploy

java - error - Tomcat en el servidor de producción, PermGen y redespliega



java.lang.outofmemoryerror: permgen space tomcat (7)

Parece que

MemoryError: PermGen space java.lang.OutOfMemoryError: PermGen space

es un problema común Puede aumentar el tamaño de su espacio permanente, pero después de 100 o 200 redesplegar estará lleno. Seguir las fugas de memoria de ClassLoader es casi imposible.

¿Cuáles son sus métodos para Tomcat (u otro contenedor de servlets simple - ¿Jetty?) En el servidor de producción? ¿Se reinicia el servidor después de cada implementación de una solución?

¿Utiliza un Tomcat para muchas aplicaciones?

Tal vez debería usar muchos servidores Jetty en diferentes puertos (o un Jetty incrustado) y anular la implementación / reiniciar / implementar cada vez?


¿Qué versión de Tomcat estás usando? Tomcat 7 y 6.0.30 tienen muchas características para evitar estas filtraciones, o al menos advertirle sobre su causa.

Esta presentación de Mark Thomas de SpringSource (y cometer Tomcat por mucho tiempo) sobre este tema es muy interesante.


Debe habilitar la recolección de basura PermGen. Por defecto, Hotspot VM NO recoge basura PermGen, lo que significa que todos los archivos de clase cargados permanecen en la memoria para siempre. Cada nueva implementación carga un nuevo conjunto de archivos de clase, lo que significa que eventualmente se queda sin espacio PermGen.


Dejé de usar el administrador de tomcat y ahora siempre apago tomcat para volver a desplegarlo.

Ejecutamos dos tomcats en el mismo servidor y usamos apache webserver con mod_proxy_ajp para que los usuarios puedan acceder a ambas aplicaciones a través del mismo puerto 80. Esto también es agradable porque los usuarios ven la página Apache Service Unavailable cuando el tomcat está inactivo.


Los switches PermGen en HotSpot solo retrasan el problema, y ​​eventualmente obtendrás OutOfMemoryError de todos modos.

Hemos tenido este problema durante mucho tiempo, y la única solución que he encontrado hasta ahora es usar JRockit en su lugar. No tiene un PermGen, por lo que el problema simplemente desaparece. Estamos evaluando en nuestros servidores de prueba ahora, y no hemos tenido un problema de PermGen desde el cambio. También intenté redistribuir más de 20 veces en mi máquina local con una aplicación que obtiene este error en la primera redistribución, y todo transcurrió maravillosamente.

JRockit está destinado a integrarse en OpenJDK, por lo que tal vez este problema desaparecerá también para Java en el futuro.

http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html

Y es gratis, con la misma licencia que HotSpot:

https://blogs.oracle.com/henrik/entry/jrockit_is_now_free_and


Puede intentar agregar estas opciones de Java:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

Esto permite la recolección de basura en el espacio PermGen (desactivado por defecto) y permite que el GC descargue clases. Además, debe usar -XX: PermSize = 64m -XX: MaxPermSize = 128m mencionado en otro lugar para aumentar la cantidad de PermGen disponible.


Sí, de hecho, esto es un problema. Estamos ejecutando tres aplicaciones web en un servidor Tomcat: No. 1 utiliza un marco de aplicaciones web, Hibernate y muchos otros archivos JAR, no. 2 usa Hibernate y algunos JAR y no. 3 es básicamente una aplicación JSP muy simple.

Cuando desplegamos no. 1, siempre reiniciamos Tomcat. De lo contrario, un error de espacio PermGen nos morderá pronto. No. 2 a veces se puede implementar sin problema, pero ya que a menudo cambia cuando no. 1 también lo hace, un reinicio está programado de todos modos. El n. ° 3 no plantea ningún problema y puede implementarse tantas veces como sea necesario sin problema.

Entonces, sí, usualmente reiniciamos Tomcat. Pero también esperamos con ansias Tomcat 7, que se supone que maneja muchos problemas de cargador de memoria / clase que están incluidos en diferentes JAR y frameworks de terceros.


Solo como referencia, hay una nueva versión de la herramienta Plumbr , que también puede monitorear y detectar fugas de Generación Permanente.