web-dev-qa-db-fra.com

Comment puis-je donner plus d'espace à Jenkins lorsqu'il s'exécute en tant que démon sur Ubuntu?

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.

41
Steve HHH

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:

  • Pour ajouter plus Java espace de tas, augmentez la valeur du paramètre -Xmx Java. Cela définit la taille maximale du pool d'allocation de mémoire ( le tas de déchets collectés).
  • Pour ajouter plus d'espace PermGen, ajoutez le paramètre 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 .

68
Steve HHH

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="

27
AvianFLU

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é:

enter image description here

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:

enter image description here

12
Juampy NR