Hva er OutofMemoryError?
En "OutOfMemoryError" i Java er en feil som oppstår når Java Virtual Machine (JVM) ikke har nok minne tilgjengelig til å utføre en gitt operasjon vellykket.
Det kan være forårsaket av forskjellige grunner som:
For å løse en OutOfMemoryError, må vi identifisere årsaken til feilen og ta en passende handling.
Dette er imidlertid for bredt og kan gjelde for enhver applikasjon som kjører på JVM. La oss begrense hva som kan forårsake en outofmemoryError i Jenkins.
Årsaker til OutofMemoryError i Jenkins
I sammenheng med Jenkins -klyngen er det fire hovedårsaker til denne feilen. De inkluderer følgende:
Diagnostisering av hovedårsaken til OutofMemoryError i Jenkins
Vi etablerte fire potensielle årsaker til denne typen feil i Jenkins. Hvordan begrenser vi hovedårsaken til denne feilen?
I et slikt tilfelle kan vi bruke et verktøy som VisualVM som lar oss visualisere minnebruken av JVM på systemet vårt.
Dette verktøyet kan finne den viktigste årsaken til OutofMemoryError når du jobber med Jenkins.
Naviger til følgende lenke og last ned maskinens siste versjon av VisualVM -verktøyet.
https: // visualvm.github.io/
Når du er lastet ned, kjør appen og velg “Lokal” for å se JVM -bruken på din lokale maskin.
Dette skal vise deg detaljene i systemet ditt, inkludert tilgjengelig fysisk minne, bytte minne og mer.
For å bestemme årsaken til denne feilen, stopp Jenkins og start den igjen mens du overvåker JVM -minnebruken på din lokale maskin.
Hvis minnebruken maksimalt mens du starter Jenkins, er årsaken en liten haugestørrelse.
Imidlertid, hvis minnebruken sakte øker, kan dette være en potensiell minnelekkasje på Jenkins -versjonen din.
Hvis Jenkins bruker alt tilgjengelig virtuelt minne, er vertskjernen tom for virtuelt minne. Du kan fikse dette ved å øke det tilgjengelige virtuelle minnet eller avslutte de løpende Jenkins -bygningene.
Hvordan du konfigurerer haugestørrelsen for JVM
Hvis du står overfor OutOfMemoryError på grunn av en liten haugestørrelse, er løsningen bare å tildele en større haugestørrelse.
Vi kan konfigurere JVMs innledende og maksimale heapstørrelse ved å bruke -xms og -xmx parametere.
Merk: Det anbefales å angi samme verdi for både -xms og XMX for JVM.
Selv om den tilstrekkelige haugestørrelsen kan variere avhengig av tilgjengelige systemressurser og Jenkins arbeidsmengde, anbefales det å stille haugestørrelsen til 2 GB (minimum) og 16 GB (maksimalt).
Du kan øke haugestørrelsen for Jenkins på Linux. Du kan redigere Jenkins oppstartstjeneste med følgende kommando:
$ sudo systemctl rediger jenkins
Du kan også redigere tjenestefilen manuelt, som vist i følgende:
sudo vim/usr/lib/systemd/system/jenkins.service
Finn alternativet Java_opts og legg til -xms og -xmx -alternativene som vist i følgende:
Miljø = "java_opts = -djava.awt.Hodeløs = True -Xms1g -xmx1g "
Legge til de tidligere alternativene øker minnestørrelsen til minnet til 1 GB. Når du er fullført, kan du starte Jenkins -tjenesten på nytt som følger:
$ sudo SystemCTL Restart Jenkins
Du kan øke -xmene og XMX -verdiene for Jenkins på Windows ved å redigere konfigurasjonsfilen.
Som standard er konfigurasjonsfilen lokalisert i C: \ Program Files \ Jenkins \ Jenkins.XML.
Rediger argumenterblokken til XML -filen som vist i følgende:
Når du er redigert, lagre filen og start Jenkins -tjenesten på nytt.
Konklusjon
Du oppdaget årsaken til OutofMemoryError når du jobbet med Jenkins. Du lærte også hvordan du feilsøker de forskjellige årsakene til denne feilen. Til slutt lærte du nå flere metoder for å fikse det.