java - outofmemoryerror - PermGen space Error en tomcat
tomcat error permgen space (11)
Si usa eclipse con tomcat, siga los pasos a continuación
En la ventana del servidor, haga doble clic en Tomcat, se abrirá la ventana de descripción general de Tomcat.
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 .
- En la ventana de edición de edición, busque Argumentos y haga clic en It.
- En la etiqueta de argumentos, busque argumentos de VM .
- 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
Si tomcat se ejecuta como servicio de Windows, ni CATALINA_OPTS ni JAVA_OPTS parecen tener ningún efecto.
Debe configurarlo en las opciones de Java en GUI.
El enlace a continuación lo explica bien
http://www.12robots.com/index.cfm/2010/10/8/Giving-more-memory-to-the-Tomcat-Service-in-Windows