was tun mit Tomcat PermGen Raum
HINTERGRUND: ich habe ein web-Projekt verwendet JSP. Die IDE ist Eclipse.
Die Konfiguration von tomcat: Automatisch veröffentlichen, wenn die Ressourcen ändern-und publishing-Intervall ist "1 Sekunde".
Einer property-Datei in den classes-Ordner, die zum speichern einiger Einstellungen.Es kann auch dynamisch geändert durch das servlet. Der modify-operation ist trigerred durch die Schaltfläche speichern in der JSP.
PROBLEM: Nach mehreren speichern-operation, Tomcat kommen mit java.lang.OutOfMemoryError: PermGen space
.
LOG-MELDUNG
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)
InformationsquelleAutor der Frage SKing7 | 2012-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tomcat braucht viel permgen. 512m ist nicht unsinnig, max. Allerdings ist es nur Verzögerungen der hot-deploy Leck. Der Permgen wachsen ~25mb pro hotdeploy, die in Eclipse, vielleicht werden jedes mal, wenn Sie sparen Sie eine Java-Datei. 512m verschwindet schnell, wenn Sie die Tastenkombination Strg+S zucken wie mich.
Die Lösung: lassen Sie Java-kick-Klasse Definitionen aus Speicher, d.h., Müll sammeln-byte-code. Fügen Sie diese zusammen mit Ihrem steigerte die permgen-Größe:
InformationsquelleAutor der Antwort Scott Linford
Setzen Sie die environment-variable mit dem Namen : "
JAVA_OPTS
" und setzen Sie den Wert wie folgt-Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
InformationsquelleAutor der Antwort Sourav Bairagi
FÜR ECLIPSE
-Xms256m -Xmx256m -XX:PermSize=256m -XX:MaxPermSize=512m
FÜR NETBEANS
netbeans_default_options="-J-client - - J-Xss256m -J-Xms256m -J-XX:PermSize=256m -XX:MaxPermSize=512m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.das awt.Grafik.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true"
Thats all
InformationsquelleAutor der Antwort SUDARSHAN BHALERAO
Einstellung wie diese:
InformationsquelleAutor der Antwort my name is Vý
Nur für Windows, wenn noch jemand stecken:--
Set JAVA_OPTS wie folgt in den Anfang(bevor Sie tatsächlich Ihren ersten Einsatz überall in der Datei):--
set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m
Starten Sie Tomcat neu, und fertig.
Finden Sie schöne Erklärung hier
InformationsquelleAutor der Antwort Nicks
Tomcat-server läuft, unterschiedlichen JAVA und der eclipse läuft in verschiedenen JAVA.
So hinzufügen
-XX:MaxPermSize=512m
zueclipse.ini
wird Hilfe bei der Lösung dieses Problems. Befolgen Sie die unten aufgeführten Schritte ausführen, um diese auf dem tomcat-server:Doppelklicken Sie auf server in eclipse
open launch configuration
hinzufügen "-XX:MaxPermSize=512m" VM-Argumente in die Argumente-Registerkarte.
InformationsquelleAutor der Antwort Purushothaman