web-dev-qa-db-fra.com

Erreurs PermGen dans Jenkins

J'ai eu des cas d'échecs de Jenkins et rien que le redéploiement de Jenkins (Jenkins est une application Web dans Tomcat) m'a aidé. Même les nouveaux travaux ont échoué avec des erreurs d’espace PermGen, mais tous les paramètres étaient corrects (tous ces paramètres -XX:PermSize partout où c’est possible). Le fait est qu'après le redéploiement tout a fonctionné comme un charme. Mais c'est une solution dure. Je voulais savoir s'il y avait des options pour restaurer l'état de Jenkins. Merci d'avance.

Mise à jour : D'accord, pour ceux qui pourraient être confrontés à quelque chose comme ça, voici ce que j'ai découvert. Ceux qui ont écrit qu'il était préférable de déployer Jenkins en tant que module Tomcat n'ont probablement pas rencontré de problèmes de déploiement de projet (avec le plugin Jenkins Deploy ou avec un Tomcat-maven-plugin dans le pom.xml de Maven). Je n'ai rencontré aucun des problèmes que j'ai décrits lors de l'installation de Jenkins séparément. Ouf!

15
John Doe

Le paramètre qui compte vraiment pour les erreurs d’espace PermGen est (et ce doit être ceci exactement ):

-XX:MaxPermSize=512m

Un tiret, deux Big Xs, Big-M, Big-P, Big-S, pas d'espaces, taille en mégas/ minuscule m. Si vous le ratez, il sera ignoré. 99% de tous les correctifs PermGen que je vois qui "ne fonctionnent pas" sont dus au fait que quelqu'un n'a pas suivi les instructions à la lettre et a utilisé un Big-M pour les mégaoctets au lieu d'un petit-m, ou pour mettre deux tirets devant au lieu d'un Exemple.

En outre, 512 Mo n'est qu'un point de départ ... ajustez-le à votre système.

34
Matt Brock

Une fois, j’ai rencontré des erreurs similaires: jenkins exécutait des builds maven, qui comprenaient l’exécution de tests surfire. J'ai découvert que la version de maven que j'utilisais (quelque chose de V2) ne transmettait pas mes options de mémoire JVM à la fourche du processus infaillible, et certains tests échouaient à cause de cela. MAVEN_OPTS, Java_OPTS, aucun ne fonctionnait.

J'ai fini par passer mes options de mémoire directement dans le fichier settings.xml, et les erreurs PermGen ont disparu.

Voici les options que j'ai utilisées (l'application était assez grosse):

-Xms512m -Xmx1024m -XX: PermSize = 512m -XX: MaxPermSize = 1024m

6
Dominique Eav

Suggestion complètement non testée, mais cette réponse suggère d'utiliser -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled lors du démarrage de Tomcat (bien que ce soit pour un problème dans un contexte complètement différent). Cette réponse , cependant, suggère que CMSPermGenSweepingEnabled n'est pas nécessaire sur Java 6 et que -XX:+UseConcMarkSweepGC doit être utilisé pour que CMSClassUnloadingEnabled soit efficace.

Au minimum, -XX:+CMSClassUnloadingEnabled peut faire l'affaire en supposant que le problème sous-jacent est dû au fait que des classes sont inutilement maintenues dans l'espace PermGen de votre instance Tomcat.

4
ig0774

peut-être que cette question peut vous aider:

Comment donner à Jenkins plus d'espace disque lorsqu'il démarre en tant que service sous Windows?

Il y a de très bonnes réponses ici.

1
Eduardo Andrade

J'ai trouvé que l'ajout de JRE à Java 8 m'a aidé. Par défaut, Jenkins utilise JRE dans le dossier d’accueil, appelé par la tâche jenkins.xml.

0
Tim Prentice

J'ai résolu l'erreur PermGen sous Linux en ajoutant à jenkins.conf:

wrapper.Java.additional.4=-XX:PermSize=1024M
0
Ahiaz Demri