2012-04-10 15 views
25

ANTECEDENTES: Tengo un proyecto web que utiliza JSP. El IDE es Eclipse. La configuración de tomcat es: Publicar automáticamente cuando los recursos cambian y el intervalo de publicación es "1 segundo".qué hacer con tomcat PermGen espacio

Archivo de propiedades en la carpeta de clases que solía guardar algunas configuraciones. También puede ser modificado dinámicamente por el servlet. La operación de modificación se inicia mediante el botón guardar en el JSP.

PROBLEMA: Después de varias operaciones de guardado, Tomcat viene con java.lang.OutOfMemoryError: PermGen space.

registro de mensajes

java.lang.OutOfMemoryError: PermGen space 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1815) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) 
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:108) 
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:58) 
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:297) 
    at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1064) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238) 
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3083) 
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:404) 
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1279) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1571) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1560) 
    at java.lang.Thread.run(Thread.java:662) 
+0

duplicado potencial. http://stackoverflow.com/questions/88235/how-to-deal-with-java-lang-outofmemoryerror-permgen-space-error – Phani

+3

Recibo este error con Tomcat cuando las personas vuelven a desplegar una aplicación web repetidamente, sin reiniciar Tomcat . Debido a una fuga asociada con el proceso de carga de clases, el espacio permgen se llena un poco más con cada redistribución. Aumentar el tamaño de permgen retrasará el punto en el que se queda sin memoria, pero en realidad, debe asegurarse de que Tomcat se recupere cuando vuelva a implementar una aplicación web. – Jon

+2

Consulte el artículo a continuación que explica completamente la configuración de tomcat para aumentar permGen [Tomcat PermGen Space] (http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/) – Phani

Respuesta

11

Usted puede configurar variable de entorno denominada: "JAVA_OPTS" y el valor establecido de la siguiente manera -Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m

+0

mientras lo hace, por favor, no se pierda los símbolos "-" .. –

+0

Parece que evita el problema, pero no es una buena solución. Dudo que guardar datos con frecuencia en el archivo de propiedades sea un diseño incorrecto, si es malo, ¿qué debería ser – SKing7

+2

? Es -Xms256m -Xmx1024m en realidad. Xms es el tamaño de inicio y Xmx es el tamaño máximo de almacenamiento dinámico. –

34

Tomcat necesita una gran cantidad de PermGen. 512m no es un máximo irrazonable. Sin embargo, solo retrasa la fuga de implementación en caliente. Permgen crecerá ~ 25mb por hotdeploy, que, en Eclipse, podría ser cada vez que guarde un archivo Java. 512m desaparece rápido si tienes una contracción Ctrl + S como yo.

La solución: permite que Java elimine las definiciones de clases de la memoria, es decir, el código de bytes de recolección de basura. Añadir estos junto con su tamaño aumentado PermGen:

-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC 
+0

@dldnh puede mencionar la línea completa que se debe agregar al archivo setenv.sh –

5

estableciendo de esta manera:

-Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m 

enter image description here

0

servidor Tomcat funciona diferente JAVA y el eclipse se ejecuta en diferentes JAVA.

Así que agregar -XX:MaxPermSize=512m a eclipse.ini ayudará a resolver este problema. Siga los pasos siguientes para agregar esto a servidor Tomcat:

  • servidor clic doble en Eclipse

  • lanzamiento abierto de configuración

  • complemento "-XX: MaxPermSize = 512m" a los argumentos de VM en el Pestaña Argumentos

6

para Eclipse

  1. Ir a las propiedades del servidor
  2. Ir a la plataforma
  3. ahora en el argumento de VM escribir este -Xms256m -Xmx256m -XX: PermSize = 256m -XX: MaxPermSize = 512m

PARA N ETBEANS

  1. Ir a Netbeans carpeta/etc/
  2. netbeans.config abierto en cualquier editor de
  3. editar esta línea como

netbeans_default_options = "- J-cliente -J-Xss256m -J-Xms256m -J-XX: PermSize = 256m -XX: MaxPermSize = 512m -J-Dapple.laf.useScreenMenuBar = true -J-Dapple.awt.graphics.UseQuartz = true -J-Dsun.java2d.noddraw = true -J-Dsun.java2d.dpiaware = true -J-Dsun.zip.disableMemoryMapping = true "

Eso es todo

0

Sólo para añadir para Windows, si alguien sigue atascado: -

  1. archivo catalina.bat abierto (situado en Apache Tomcat carpeta de instalación/bin)
  2. Conjunto JAVA_OPTS de la siguiente manera desde el principio (antes de su primer uso en cualquier lugar del archivo): -

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

  3. Reinicie Tomcat y listo.

puede encontrar buena explicación here

Cuestiones relacionadas