Qual è OutfMemoryError?
Un "outofmemoryerror" in Java è un errore che si verifica quando la macchina virtuale Java (JVM) non ha una memoria sufficiente disponibile per eseguire una determinata operazione correttamente.
Può essere causato da vari motivi come:
Per risolvere un outofmemoryerror, dobbiamo identificare la causa dell'errore e intraprendere un'azione appropriata.
Tuttavia, questo è troppo ampio e può applicarsi a qualsiasi applicazione che funziona su JVM. Riducia cosa può causare un outofmemoryerror in Jenkins.
Cause di outofmemoryerror in Jenkins
Nel contesto del cluster di Jenkins, ci sono quattro cause principali di questo errore. Includono quanto segue:
Diagnosi della causa principale di OutOfMemoryError in Jenkins
Abbiamo stabilito quattro potenziali cause di questo tipo di errore in Jenkins. Come ridotto la causa principale di questo errore?
In tal caso, possiamo utilizzare uno strumento come VisualVM che ci consente di visualizzare l'uso della memoria di JVM sul nostro sistema.
Questo strumento può individuare la causa principale di OutOfMemoryError quando si lavora con Jenkins.
Passa al seguente link e scarica l'ultima versione della tua macchina dello strumento VisualVM.
https: // Visualvm.github.io/
Una volta scaricato, eseguire l'app e selezionare "Locale" per visualizzare l'utilizzo JVM sulla macchina locale.
Questo dovrebbe mostrarti i dettagli del tuo sistema tra cui la memoria fisica disponibile, la memoria di scambio e altro ancora.
Per determinare la causa di questo errore, interrompere Jenkins e ricominciarlo mentre monitora l'utilizzo della memoria JVM sulla macchina locale.
Se l'utilizzo della memoria si esaurisce mentre si avvia Jenkins, la causa è una piccola dimensione del mucchio.
Tuttavia, se l'utilizzo della memoria aumenta lentamente, questa potrebbe essere una potenziale perdita di memoria sulla versione Jenkins.
Se Jenkins utilizza tutta la memoria virtuale disponibile, il kernel host sta esaurendo la memoria virtuale. Puoi risolverlo aumentando la memoria virtuale disponibile o terminando le build in esecuzione di Jenkins.
Come configurare la dimensione del heap per JVM
Se stai affrontando OutOfMemoryError a causa di una piccola dimensione del heap, la soluzione è solo per allocare una dimensione di heap più grande.
Possiamo configurare la dimensione iniziale e massima del heap di JVM utilizzando i parametri -xms e -xmx.
Nota: si consiglia di impostare lo stesso valore sia per -XMS che per XMX per JVM.
Sebbene la dimensione del heap sufficiente possa variare a seconda delle risorse del sistema disponibili e del carico di lavoro di Jenkins, si consiglia di impostare la dimensione del heap su 2 GB (minimo) e 16 GB (massimo).
Puoi aumentare la dimensione del heap per Jenkins su Linux. È possibile modificare il servizio di avvio Jenkins con il seguente comando:
$ sudo systemctl modifica jenkins
È inoltre possibile modificare manualmente il file di servizio, come mostrato nel seguente:
sudo vim/usr/lib/systemd/system/jenkins.servizio
Individua l'opzione java_opts e aggiungi le opzioni -xms e -xmx come mostrato nelle seguenti:
Environment = "java_opts = -djava.awt.Headless = true -xms1g -xmx1g "
L'aggiunta delle opzioni precedenti aumenta la dimensione della memoria heap a 1 GB. Una volta completato, è possibile riavviare il servizio Jenkins come segue:
$ sudo systemctl riavvia jenkins
È possibile aumentare i valori -xms e xmx per Jenkins su Windows modificando il file di configurazione.
Per impostazione predefinita, il file di configurazione si trova in C: \ Programmi \ Jenkins \ Jenkins.XML.
Modifica il blocco Argomenti del file XML come mostrato nel seguente:
Una volta modificato, salva il file e riavvia il servizio Jenkins.
Conclusione
Hai scoperto la causa di OutOfMemoryError quando hai lavorato con Jenkins. Hai anche imparato a risolvere i vari cause di questo errore. Infine, ora hai imparato i molteplici metodi per fissarlo.