2013-02-07 7 views

risposta

57

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 (sostituire 512 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.

+1

Credo che hai dimenticato i secondi trattino, quindi dovrebbe essere: JAVA_ARGS = "- Xmx1048m -XX: MaxPermSize = 512m" –

+0

Grazie! Ho aggiunto il trattino mancante. –

+0

np, grazie per la risposta. –

21

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

+3

Cheers, stavo quasi impazzendo cercando di trovare questo – bmaher

+0

Sul mio ** openSUSE Leap ** 42.1 (x86_64) la configurazione di Jenkins per la versione 2.70 si trova in '/ etc/sysconfig/jenkins' – user1053510

+0

anche per RedHat RHEL 7.4, jenkins 2.98 –

1

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:

enter image description here

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:

enter image description here