I miei lavori Jenkins stanno esaurendo la memoria, fornendo i messaggi java.lang.OutOfMemoryError
nel registro di build. Ma ho usato Ubuntu Package Manager, aptitude
, o apt-get
per installare Jenkins, e non so dove cercare di modificare la quantità di spazio heap allocata a Jenkins.Come posso dare a Jenkins più spazio sull'heap quando è in esecuzione come un demone su Ubuntu?
risposta
Ci sono due tipi di OutOfMemoryError
messaggi che potrebbero verificarsi durante un lavoro di Jenkins viene eseguito:
java.lang.OutOfMemoryError: Heap space
- questo significa che si necessità di aumentare la quantità di spazio di heap allocata a Jenkins quando inizia daemon .java.lang.OutOfMemoryError: PermGen space
- questo significa che è necessario aumentare lo spazio di generazione assegnato per memorizzare i metadati dell'oggetto Java. Aumentando il valore del parametro-Xmx
non avrà alcun effetto su questo errore.
Su Ubuntu 12.04 LTS, rimuovere l'impostazione JAVA_ARGS
on line dieci /etc/default/jenkins
:
- Per aggiungere più spazio heap Java, aumentare il valore del parametro
-Xmx
Java. Ciò imposta la dimensione massima del pool di allocazione di memoria (l'heap di raccolta dei dati inutili). - per aggiungere più PermGen spazio, aggiungere il parametro
XX:MaxPermSize=512m
(sostituire512
con qualcos'altro, se si vuole di più. Il mucchio permanente generazione contiene meta informazioni su classi utente.
Ad esempio, questo estratto è dal default /etc/default/jenkins
dopo una nuova installazione di Jenkins:
# arguments to pass to java
#JAVA_ARGS="-Xmx256m"
Ecco come apparirebbe se si imposta lo spazio di heap di essere di 1 GB:
# arguments to pass to java
JAVA_ARGS="-Xmx1048m"
Fare attenzione a non impostare le dimensioni dell'heap troppo grandi, poiché qualsiasi allocazione riduce la quantità di memoria disponibile per il sistema operativo e altri programmi, che potrebbe causare un numero eccessivo di paging (memoria scambiata tra RAM e disco di swap, che rallenterà il tuo sistema).
Se anche si imposta MaxPermSpace
, è necessario aggiungere uno spazio tra i parametri):
# arguments to pass to java
JAVA_ARGS="-Xmx1048m -XX:MaxPermSize=512m"
Dopo aver effettuato la modifica, riavviare Jenkins con grazia dall'interfaccia web Jenkins, o forzare un riavvio immediato del comando -line con sudo /etc/init.d/jenkins restart
.
Ho trovato il seguente sito utile per comprendere le dimensioni heap massime e permanenti di Java: http://www.freshblurbs.com/blog/2005/05/19/explaining-java-lang-outofmemoryerror-permgen-space.html.
Per CentOS, la directory in cui si trova Jenkins.xml è/etc/sysconfig/per jenkins-1.579-1.1
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xmx -XX:MaxPermSize="
Cheers, stavo quasi impazzendo cercando di trovare questo – bmaher
Sul mio ** openSUSE Leap ** 42.1 (x86_64) la configurazione di Jenkins per la versione 2.70 si trova in '/ etc/sysconfig/jenkins' – user1053510
anche per RedHat RHEL 7.4, jenkins 2.98 –
Se si sta utilizzando Ubuntu Server, installare Monitoring plugin per visualizzare la quantità di memoria Jenkins sta usando. Ad esempio, questo è quello che ho visto dopo averlo installato:
Poi, con il comando free -m
, ho capito che cosa era la dimensione della memoria del server. Nel mio caso, 16 GB. Con queste informazioni, ho aperto /etc/default/jenkins
e cambiato:
JAVA_ARGS="-Djava.awt.headless=true"
a
JAVA_ARGS="-Xmx8384m -Djava.awt.headless=true"
Dove 8384 è 8Gb. Poi ho riavviato Jenkins con il comando sudo service jenkins restart
e poi, dopo l'attivazione del lavoro che è stato sempre problemi di memoria, le cose sembravano molto meglio e il lavoro potrebbe completare in questa e le successive esecuzioni:
Credo che hai dimenticato i secondi trattino, quindi dovrebbe essere: JAVA_ARGS = "- Xmx1048m -XX: MaxPermSize = 512m" –
Grazie! Ho aggiunto il trattino mancante. –
np, grazie per la risposta. –