Pregunta

Parece

 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 vuelve a desplegar que estará lleno. El seguimiento de las pérdidas de memoria cargador de clases es casi imposible.

¿Cuáles son sus métodos para Tomcat (u otro contenedor de servlets sencilla - el embarcadero) en el servidor de producción? Es reiniciar el servidor después de cada desplegar una solución?

¿Utiliza un Tomcat para muchas aplicaciones?

Tal vez debería usar muchos servidores embarcadero en diferentes puertos (o un embarcadero incorporado) y hacer undeploy / reinicio / desplegar cada vez?

¿Fue útil?

Solución

Me di por vencido sobre el uso del gestor de Tomcat y ahora siempre apagar las Tomcat Para volver a implementar.

Corremos dos gatos machos en el mismo servidor y el servidor web Apache utilizamos con mod_proxy_ajp que los usuarios puedan acceder a ambas aplicaciones a través del mismo puerto 80. Esto es bueno también porque los usuarios ver la página No Disponible servicio de Apache Tomcat cuando el se ha reducido.

Otros consejos

Se puede tratar de añadir 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 a las clases de descarga. Además se debe utilizar el -XX: PermSize = 64m -XX: MaxPermSize = 128m mencionado en otra parte para aumentar la cantidad de PermGen disponible

.

Sí, efectivamente, este es un problema. Nos estamos quedando tres aplicaciones web en un servidor Tomcat: No. 1 utiliza un framework de aplicaciones web, Hibernate y muchas otras JAR, no. 2 usos Hibernate y unos tarros y no hay. 3 es básicamente una aplicación muy sencilla JSP.

Cuando desplegamos no. 1, siempre reiniciar Tomcat. De lo contrario un error de espacio PermGen pronto nos va a morder. Nº 2 veces se puede implementar sin problemas, pero ya que a menudo cambia cuando nadie. 1 hace tan bien, un reinicio está previsto de todos modos. No. 3 no plantea ningún problema en absoluto y se pueden implementar como a menudo como sea necesario, sin problema.

Así que, sí, por lo general reiniciar Tomcat. Pero también estamos mirando adelante a Tomcat 7, que se supone que manejar muchos problemas de memoria / cargador de clases que están enterrados en diferentes JAR de terceros y marcos.

PermGen cambia en HotSpot sólo retrasan el problema, y ??finalmente obtendrá el OutOfMemoryError de todos modos.

Hemos tenido este problema desde hace mucho tiempo, y la única solución que he encontrado hasta ahora es utilizar JRockit lugar. No tiene un PermGen, por lo que el problema desaparezca. Lo estamos evaluando en nuestros servidores de prueba ahora, y no hemos tenido un problema PermGen desde el interruptor. También probé la redistribución de más de 20 veces en mi máquina local con una aplicación que recibe este error en el primer redeploy, y todo chugged llevaban muy bien.

JRockit está destinado a ser integrado en OpenJDK, así que tal vez este problema va a desaparecer por acciones de Java demasiado en el futuro.

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

Y es gratis, bajo la misma licencia que HotSpot:

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

Debe habilitar la recogida de basura PermGen. Por defecto Hotspot VM no recoge la basura PermGen, lo que significa que todos los archivos de clases cargadas permanecen en la memoria para siempre. Cada nueva cargas de implementación de un nuevo conjunto de archivos de clase lo que significa que con el tiempo se queda sin espacio PermGen.

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

Este presentación de mark Thomas de SpringSource (y desde hace mucho tiempo Tomcat confirmador) sobre este tema es muy interesante.

Sólo de referencia, hay una nueva versión de Plumbr herramienta, que puede monitorizar y detectar fugas permanente generación también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top