que faire avec tomcat PermGen space
FOND: j'ai un Projet web qui utilise des JSP. L'IDE Eclipse.
La configuration de tomcat est: publier Automatiquement lors du changement des ressources et intervalle de publication est "1 seconde".
Une propriété de fichier dans le dossier classes qui sert à enregistrer certains paramètres.Il peut également être modifiée dynamiquement par la servlet. L'opération de modification est trigerred par le bouton enregistrer dans la page JSP.
PROBLÈME: Après plusieurs opération d'enregistrement, Tomcat venir avec java.lang.OutOfMemoryError: PermGen space
.
MESSAGE DE JOURNAL
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)
- S'il vous plaît aller à travers la ci-dessous l'article qui explique la configuration de tomcat pour augmenter la permGen Tomcat PermGen Space
- Doublon potentiel. stackoverflow.com/questions/88235/...
- J'ai cette erreur avec Tomcat chaque fois que les gens redéployer une application web à plusieurs reprises, sans redémarrage de Tomcat. En raison d'une fuite associée à la classloading processus, la permgen space devient un peu plus complète avec chaque redéployer. L'augmentation de la permgen taille de retarder le moment où il est à court de mémoire, mais vraiment, vous devez vous assurer Tomcat s'est fait virer quand vous redéployer une webapp.
- Double Possible de PermGen space Erreur dans tomcat
Vous devez vous connecter pour publier un commentaire.
Tomcat n'a besoin de beaucoup de permgen. 512m est pas déraisonnable max. Cependant, il ne fait que retarder le hot-déployer la fuite. Permgen va croître ~25mo par hotdeploy, qui, dans Eclipse, peut-être chaque fois que vous enregistrez un fichier Java. 512m disparaît rapidement si vous avez un Ctrl+S twitch comme moi.
La solution: permettre à Java pour le coup des définitions de classe de mémoire, c'est à dire, les déchets se rassemblent en byte code. Ajouter ces avec votre stimulé la permgen taille:
Vous pouvez définir la variable d'environnement nommée : "
JAVA_OPTS
" et de la valeur définie de la façon suivante-Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
POUR ECLIPSE
-Xms256m -Xmx256m -XX:PermSize=256m -XX:MaxPermSize=512m
POUR NETBEANS
netbeans_default_options="-J-client -J-Xss256m -J-Xms256m -J-XX:PermSize=256m -XX:MaxPermSize=512m -J-Pommelé.laf.useScreenMenuBar=true -J-Pommelé.awt.les graphiques.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true"
C'est tout
paramètre comme ceci:
Juste à ajouter pour Windows, si quelqu'un est toujours bloqué:--
Set JAVA_OPTS comme suit dans le début(avant sa première utilisation n'importe où dans le fichier):--
set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m
Redémarrer Tomcat et de son fait.
Vous pouvez trouver belle explication ici
Juste le configurer à partir de l'apache tomcat interface:
Serveur Tomcat fonctionne différents JAVA et eclipse fonctionne en JAVA.
Ainsi, l'ajout de
-XX:MaxPermSize=512m
àeclipse.ini
aidera à résoudre ce problème. Suivez les étapes ci-dessous pour ajouter ce serveur tomcat:Double-cliquez sur le serveur dans eclipse
ouvrir la configuration de lancement
ajouter "-XX:MaxPermSize=512m" de VM arguments au Arguments onglet.