2012-10-31 9 views
11

Sto costruendo un'app Maven Java su un server di generazione Jenkins. Sto correndo in java.lang.OutOfMemoryError: PermGen space molte volte durante la compilazione su Jenkins (ma mai sul mio localhost) e quindi fallisce la mia build.Imposta la dimensione permgen per i processi JVM figlio che Maven eseguirà.

Ho già provato l'impostazione MAVEN_OPTS per Jenkins: sono entrato in Jenkins ->Manage Jenkins ->Configure system ->Global MAVEN_OPTS ed è stato fissato a -Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:PermSize=512m. Nonostante l'impostazione di questo alto valore, continuiamo a correre nei problemi di spazio PermGen. Non voglio impostare MAVEN_OPTS su un valore più alto; Non vedo come la mia app possa richiedere un gig di spazio e preferirei approfondire il problema dell'utilizzo della memoria alta.

Ultimamente, ho pensato che forse il problema dello spazio permgen NON proviene dallo stesso Maven, ma piuttosto da uno dei processi JVM che Maven fa da spin (es: plugins). Propongo questa ipotesi perché Maven è ancora in grado di eseguire test TestNG, nonostante abbia già sputato le nostre linee di errore dello spazio permgen. Uno di questi plugin che causa l'errore PermGen è Jetty:

Oct 31, 2012 7:55:37 AM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: handle failed 
java.lang.OutOfMemoryError: PermGen space 

Quindi, vorrei sapere:

fa la variabile MAVEN_OPTS si applicano anche a figlio JVM processi che una build di Maven gira off ? In caso contrario, come impostare le opzioni JVM per questi processi figlio come Jetty?

NOTA: Sto usando Maven 3.0.4.

risposta

7

La maggior parte dei plugin Maven che generano i processi Java avranno il proprio modo di specificare gli argomenti della riga di comando JVM. Ad esempio, è possibile configurare le dimensioni heap e permgen nei processi generati dal plug-in Surefire utilizzando il parametro di configurazione argLine (vedere http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#argLine).

Il plugin Jetty non genera processi, quindi heap e permgen sono governati dagli argomenti JVM forniti per il processo Maven.

Se si sta esaurendo la memoria quando si esegue da Jenkins ma non quando si esegue localmente, controllare il MAVEN_OPTS che passa Jenkins a Maven.

+0

Abbiamo provato ad impostare argLine, ma non ha funzionato quando abbiamo eseguito 'mvn gae: run', che è il * maven-gae-plugin *. – ecbrodie

+1

Guardando il codice sorgente di 'maven-gae-plugin', hai provato il suo parametro' jvmFlags'? – Kkkev

+0

Mi sono imbattuto in questo stesso problema di recente, quindi ho provato il tuo suggerimento sull'impostazione del parametro 'jvmFlags' ... e ha funzionato come un incantesimo! Il mio problema era che impostiamo il tag '' nella configurazione per maven-gae-plugin, ma dovremmo aver usato ''. Grazie! – ecbrodie

1

È possibile configurare le opzioni di vm a livello globale (impostazioni) e sovrascriverle per qualsiasi lavoro di compilazione. Per esempio. in lavori basati su Maven, il campo MAVEN_OPTS è nascosto in uno dei blocchi "avanzati".

1

Come accennato in precedenza da un'altra risposta che ogni processo ha il proprio modo di specificare gli argomenti. In caso di sottoprocessi di tipo Maven generato da Jenkins, l'impostazione sarà nella configurazione del lavoro sotto la build di maven. È necessario fare clic sul pulsante "Avanzate" e impostare l'opzione nel campo MAVEN_OPTS. es: -XX:MaxPermSize=256m -Xms512m -Xmx1024m

Problemi correlati