perm outofmemoryerror gen error java tomcat permgen

java - outofmemoryerror - PermGen space Error en tomcat



tomcat error permgen space (11)

Si usa eclipse con tomcat, siga los pasos a continuación

  1. En la ventana del servidor, haga doble clic en Tomcat, se abrirá la ventana de descripción general de Tomcat.

  2. En la ventana de Descripción general, encontrará Abrir configuración de inicio en Información general y haga clic en Abrir configuración de inicio .

  3. En la ventana de edición de edición, busque Argumentos y haga clic en It.
  4. En la etiqueta de argumentos, busque argumentos de VM .
  5. simplemente pegue este -Xms256m -Xmx512m -XX: PermSize = 256m -XX: MaxPermSize = 512m hasta el final de los argumentos.

Estoy trabajando en Windows Environment. Y estoy recibiendo este error cada vez que trabajo con tomcat-

Apr 30, 2012 5:30:37 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet default threw exception java.lang.OutOfMemoryError: PermGen space 2012-04-30 17:30:37.719 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@4ae53a99 2012-04-30 17:30:37.719 INFO net.spy.memcached.MemcachedConnection: Reconnecting due to failure to connect to {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} java.net.ConnectException: Connection refused: no further information Apr 30, 2012 5:30:37 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet default threw exception java.lang.OutOfMemoryError: PermGen space Exception in thread "Memcached IO over {MemcachedConnection to localhost/127.0.0.1:11211}" java.lang.OutOfMemoryError: PermGen space Apr 30, 2012 5:30:38 PM org.apache.coyote.http11.Http11Processor process SEVERE: Error processing request java.lang.OutOfMemoryError: PermGen space Apr 30, 2012 5:30:38 PM org.apache.coyote.http11.Http11Processor process SEVERE: Error processing request java.lang.OutOfMemoryError: PermGen space Apr 30, 2012 5:30:38 PM org.apache.coyote.http11.Http11Processor process SEVERE: Error processing request java.lang.OutOfMemoryError: PermGen space Apr 30, 2012 5:30:41 PM org.apache.catalina.connector.CoyoteAdapter service SEVERE: An exception or error occurred in the container during the request processing java.lang.OutOfMemoryError: PermGen space Apr 30, 2012 5:30:43 PM org.apache.catalina.core.StandardHostValve custom SEVERE: Exception Processing ErrorPage[exceptionType=java.lang.Throwable, location=/error.action] java.lang.OutOfMemoryError: PermGen space Apr 30, 2012 5:30:42 PM org.apache.catalina.core.StandardHostValve custom SEVERE: Exception Processing ErrorPage[exceptionType=java.lang.Throwable, location=/error.action] java.lang.OutOfMemoryError: PermGen space Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space

Intenté agregar JAVA_OPTS with the value as -Xms1024m -Xmx1024m en Variables del sistema, aún JAVA_OPTS with the value as -Xms1024m -Xmx1024m el mismo error (java.lang.OutOfMemoryError: PermGen space) una y otra vez. Cualquier ayuda será apreciada. También he leído otras publicaciones en stackoverflow pero no funcionó.


Debe asignar más espacio al PermGenSpace de la JVM de tomcat.

Esto se puede hacer con el argumento de JVM: -XX: MaxPermSize = 128m

De forma predeterminada, el espacio PermGen es 64M (y contiene todas las clases compiladas, por lo que si tiene muchas jar (clases) en su classpath, puede llenar este espacio).

En una nota lateral, puedes monitorear el tamaño del espacio PermGen con JVisualVM e incluso puedes inspeccionar su contenido con YourKit Java Profiler


El código de línea de @AndreSmiley funcionó para mí.

solo se requiere modificación.

-XX: MaxPermSize = 256 m

"m" significa MB.

En realidad, mi aplicación es bastante grande, así que se me aconsejó que fuera 1024m para el rendimiento.


El espacio PermGen es lo que Tomcat usa para almacenar definiciones de clases (solo definiciones, sin instanciaciones) y grupos de cadenas que han sido internados. Por experiencia, los problemas de espacio de PermGen tienden a ocurrir frecuentemente en entornos de desarrollo, ya que Tomcat tiene que cargar nuevas clases cada vez que despliega un WAR o un jspc (cuando edita un archivo jsp). Personalmente, tiendo a desplegar y redesplegar guerras mucho cuando estoy en pruebas de desarrollo, así que sé que estoy destinado a agotarme tarde o temprano (principalmente porque los ciclos de GC de Java todavía son un poco basura, así que si vuelves a desplegar tus guerras de forma rápida y frecuente) suficiente, el espacio se llena más rápido de lo que pueden manejar).

En teoría, esto debería ser un problema menor en entornos de producción, ya que (afortunadamente) no se cambia la base de código en 10 minutos. Si todavía ocurre, eso solo significa que su base de código (y las dependencias de biblioteca correspondientes) son demasiado grandes para la asignación de memoria predeterminada y solo tendrá que perder el tiempo con la asignación de pila y montón. Creo que los estándares son algo así como:

-XX:MaxPermSize=SIZE

Sin embargo, he encontrado que la mejor manera de solucionar eso para siempre es permitir que las clases se descarguen para que su PermGen nunca se agote:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

Cosas así me funcionaron mágicamente en el pasado. Una cosa es que hay una importante compensación de rendimiento en el uso de esos, ya que permgen sweeps hará como un extra de 2 solicitudes por cada solicitud que haga o algo por el estilo. Deberá equilibrar su uso con las compensaciones.


En la versión del instalador del servicio Windows Tomcat 7.0. No hay catalina.bat en / bin. Por lo tanto, necesita abrir Tomcat7w.exe en / bin y agregar el argumento de soplar JVM

-XX:PermSize=256m -XX:MaxPermSize=512m

en la opción Java en la pestaña Java, así. También agregas otras opciones.

Otro, si usa IntellijIDEA, necesita agregar un argumento JVM en Configuraciones de Servidor, como este.


Este me funcionó, en startup.bat debe agregarse la línea siguiente si no existe, set JAVA_OPTS con el valor -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256 . La línea completa:

set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256


Estoy ejecutando tomcat7 en CentOS 6.6. Traté de crear un nuevo archivo /usr/share/tomcat/bin/setenv.sh y establecer tanto JAVA_OPTS como CATALINA_OPTS . Pero Tomcat no recogió los valores en el reinicio. Cuando coloco la siguiente línea en /etc/tomcat/tomcat.conf:

CATALINA_OPTS="-Xms128m -Xmx1024m -XX:MaxPermSize=1024m"

Tomcat recogió la nueva variable de entorno. Lo verifiqué ejecutándome

ps aux | grep tomcat

y ver las nuevas configuraciones en la salida. Esto tomó mucho tiempo para diagnosticar y no vi a nadie más sugiriendo esto, así que pensé en echarlo a la comunidad de Internet.


Intenté lo mismo en Intellij Ideav11.

No estaba recogiendo la configuración después de verificar el proceso usando grep. En caso de que no sea así, proporcione la configuración de mem para JAVA_OPTS en catalina.sh en su lugar.


Matar el proceso de tomcat (forzosamente, matar -9 para Linux) y volverlo a comenzar resuelve el problema. Supongo que la instancia de tomcat no se mata correctamente utilizando shutdown.bat. Por lo tanto, tenemos que matar a la fuerza el proceso y comenzar de nuevo.


Para complementar la respuesta de Michael, y de acuerdo con esta respuesta , una forma segura de lidiar con el problema es usar los siguientes argumentos:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC