web-dev-qa-db-fra.com

Erreur PermGen Space lors du déploiement de Tomcat 7?

J'ai installé Tomcat 7 pour mettre à niveau ma version de projet JIRA de 5.0 à 6. Après avoir placé le dossier du projet dans les applications Web de Tomcat. J'exécute cet hôte local: 8080/jira après une longue période de fonctionnement, il génère un message d'erreur. Merci de nous aider à résoudre ce problème merci d'avance

Java.lang.RuntimeException: PermGen space
    at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.Java:54)
    at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.Java:66)
    at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1.execute(AsynchronousAbleEventDispatcher.Java:32)
    at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.Java:60)
    at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.Java:160)
    at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.Java:79)
    at com.atlassian.plugin.event.impl.DefaultPluginEventManager.broadcast(DefaultPluginEventManager.Java:84)
    at com.atlassian.plugin.manager.DefaultPluginManager.addPlugins(DefaultPluginManager.Java:768)
    at com.atlassian.plugin.manager.DefaultPluginManager.init(DefaultPluginManager.Java:200)
    at com.atlassian.jira.plugin.JiraPluginManager.start(JiraPluginManager.Java:63)
    at com.atlassian.jira.ComponentManager$PluginSystem.start(ComponentManager.Java:635)
    at com.atlassian.jira.ComponentManager.startJIRA(ComponentManager.Java:214)
    at com.atlassian.jira.ComponentManager.quickStart(ComponentManager.Java:208)
    at com.atlassian.jira.ComponentManager.start(ComponentManager.Java:193)
    at com.atlassian.jira.upgrade.PluginSystemLauncher.start(PluginSystemLauncher.Java:23)
    at com.atlassian.jira.startup.DefaultJiraLauncher$3.run(DefaultJiraLauncher.Java:107)
    at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.doNowOrEnqueue(DatabaseConfigurationManagerImpl.Java:323)
    at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.doNowOrWhenDatabaseActivated(DatabaseConfigurationManagerImpl.Java:211)
    at com.atlassian.jira.startup.DefaultJiraLauncher.postDbLaunch(DefaultJiraLauncher.Java:100)
    at com.atlassian.jira.startup.DefaultJiraLauncher.access$100(DefaultJiraLauncher.Java:27)
    at com.atlassian.jira.startup.DefaultJiraLauncher$1.run(DefaultJiraLauncher.Java:66)
    at com.atlassian.jira.util.devspeed.JiraDevSpeedTimer.run(JiraDevSpeedTimer.Java:33)
    at com.atlassian.jira.startup.DefaultJiraLauncher.start(DefaultJiraLauncher.Java:61)
    at com.atlassian.jira.startup.LauncherContextListener.contextInitialized(LauncherContextListener.Java:54)
    at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:4797)
    at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5291)
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
    at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:901)
    at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:877)
    at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:633)
    at org.Apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.Java:657)
    at org.Apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.Java:1637)
    at Java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at Java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at Java.util.concurrent.FutureTask.run(Unknown Source)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at Java.lang.Thread.run(Unknown Source)
Caused by: Java.lang.OutOfMemoryError: PermGen space
19
Maharajan

Une solution plus utile consiste à augmenter les valeurs de la variable Java_OPTS.
Ajoutez la ligne suivante à votre Catalina.bat/Catalina.sh fichier dans le répertoire bin

Pour Windows (Catalina.bat)

set Java_OPTS="-Xms1024m -Xmx10246m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"  

Pour Unix (Catalina.sh)

export Java_OPTS="-Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"  

Plus de solutions que vous pouvez trouver dans ce article

39
Ilya

Parfois, après les redéploiements, le garbage collector ne peut pas détruire certains objets sur Tomcat et manquer d'espace. Il y a plusieurs raisons à ces cas:

  • Si vous utilisez des objets CRUD - vérifiez s'ils sont tous fermés après utilisation.
  • Si votre application a utilisé d'autres bibliothèques - parfois les objets de ces bibliothèques ne peuvent pas également être détruits, comme MysqlConnector, Hibernate/C3p0 ou autre - essayez de placer ces bibliothèques dans le dossier Tomcat/lib

Vérifiez le Tomcat avec le "Java VisualVM" et vérifiez le permGen après le redéploiement.
La valeur par défaut de l'espace permGen est souvent également très faible, vous pouvez les augmenter avec le paramètre javaVM suivant

 -XX:PermSize=64M -XX:MaxPermSize=256m

Vous pouvez suivre ces tutoriels

http://www.mkyong.com/Tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

MISE À JOUR

une autre solution peut être trouvée ici: que faire de l'espace Tomcat PermGen

ajouter -XX: + CMSClassUnloadingEnabled -XX: + UseConcMarkSweepGC aux options javaVM

11
Zelldon

Ajustez la valeur du permgen en utilisant -XX:PermSize={value} et -XX:MaxPermSize={value} via la variable Java_OPTS où 'value' est une chaîne comme 256m.

1
Deepak Bala