Mes travaux Jenkins manquent de mémoire, ce qui donne Java.lang.OutOfMemoryError
messages dans le journal de build. Mais j'ai utilisé Ubuntu Package Manager, aptitude
ou apt-get
pour installer Jenkins, et je ne sais pas où chercher pour changer la quantité d'espace de tas alloué à Jenkins.
Il existe deux types de messages OutOfMemoryError
que vous pouvez rencontrer lors de l'exécution d'un travail Jenkins:
Java.lang.OutOfMemoryError: Heap space
- cela signifie que vous devez augmenter la quantité d'espace de mémoire allouée à Jenkins au démarrage du démon.Java.lang.OutOfMemoryError: PermGen space
- cela signifie que vous devez augmenter la quantité d'espace de génération alloué pour stocker les métadonnées d'objet Java. L'augmentation de la valeur du paramètre -Xmx
N'aura aucun effet sur cette erreur.Sur Ubuntu 12.04 LTS, décommentez le paramètre Java_ARGS
Sur la ligne dix de /etc/default/jenkins
:
-Xmx
Java. Cela définit la taille maximale du pool d'allocation de mémoire ( le tas de déchets collectés).XX:MaxPermSize=512m
(Remplacez 512
Par autre chose si vous en voulez plus. Le tas de génération permanente contient des méta-informations sur les classes d'utilisateurs.Par exemple, cet extrait provient de la valeur par défaut /etc/default/jenkins
Après une nouvelle installation de Jenkins:
# arguments to pass to Java
#Java_ARGS="-Xmx256m"
Voici à quoi cela ressemblerait si vous définissez l'espace de mémoire sur 1 Go:
# arguments to pass to Java
JAVA_ARGS="-Xmx1048m"
Veillez à ne pas définir une taille de tas trop grande, car tout ce que vous allouez réduit la quantité de mémoire disponible pour le système d'exploitation et d'autres programmes, ce qui pourrait provoquer une pagination excessive (mémoire échangée d'avant en arrière entre RAM = et le disque d'échange, ce qui ralentira votre système).
Si vous définissez également MaxPermSpace
, vous devez ajouter un espace entre les paramètres):
# arguments to pass to Java
JAVA_ARGS="-Xmx1048m -XX:MaxPermSize=512m"
Après avoir apporté une modification, redémarrez Jenkins gracieusement à partir de l'interface Web Jenkins ou forcez un redémarrage immédiat à partir de la ligne de commande avec Sudo /etc/init.d/jenkins restart
.
J'ai trouvé le site suivant utile pour comprendre Java tailles de tas de génération maximale et permanente: http://www.freshblurbs.com/blog/2005/05/19/explaining-Java -lang-outofmemoryerror-permgen-space.html .
Pour CentOS, le répertoire dans lequel se trouve Jenkins.xml par défaut est/etc/sysconfig/for jenkins-1.579-1.1
JENKINS_Java_OPTIONS="-Djava.awt.headless=true -Xmx -XX:MaxPermSize="
Si vous utilisez Ubuntu Server, installez d'abord le plugin Monitoring pour voir la quantité de mémoire utilisée par Jenkins. Par exemple, voici ce que j'ai vu après l'avoir installé:
Ensuite, avec la commande free -m
, J'ai compris quelle était la taille de la mémoire du serveur. Dans mon cas, 16 Go. Avec cette information, j'ai ouvert /etc/default/jenkins
et modifié:
Java_ARGS="-Djava.awt.headless=true"
à
Java_ARGS="-Xmx8384m -Djava.awt.headless=true"
Où 8384 est 8 Go. J'ai ensuite redémarré Jenkins avec la commande Sudo service jenkins restart
puis, après avoir déclenché le travail qui entraînait des problèmes de mémoire, les choses semblaient beaucoup mieux et le travail pouvait se terminer sur cette exécution et les suivantes: