Jak naprawić Jenkins Outofmemoryerror

Jak naprawić Jenkins Outofmemoryerror
Jednym z najbardziej widocznych błędów podczas pracy z Jenkinsem jest błąd outofmemory. W tym samouczku omówiono, dlaczego ten błąd może pojawić się w twoich Jenkinach i jak go naprawić.

Co to jest OutofMemoryerror?

„OutofMemoryerror” w Javie to błąd, który występuje, gdy maszyna wirtualna Java (JVM) nie ma wystarczającej ilości pamięci, aby pomyślnie wykonać daną operację.

Może to być spowodowane różnymi przyczynami, takimi jak:

  1. JVM został skonfigurowany z małym maksymalnym rozmiarem sterty. Dlatego, gdy aplikacja działająca na JVM potrzebuje większego rozmiaru sterty niż ustawiony maksymalny rozmiar, nie udaje się, prowadząc do OutofMemoryerror.
  2. Aplikacja ma potencjalny wyciek pamięci, powodując, że w czasie zachowuje coraz więcej pamięci.

Aby rozwiązać OutofMemoryError, musimy zidentyfikować przyczynę błędu i podjąć odpowiednie działanie.

Jest to jednak zbyt szerokie i może zastosować do dowolnej aplikacji działającej na JVM. Zawęźmy to, co może spowodować Outofmemoryerror w Jenkins.

Przyczyny OutofMemoryerror w Jenkins

W kontekście klastra Jenkins istnieją cztery główne przyczyny tego błędu. Obejmują one:

  1. Zwiększenie wielkości danych Jenkins. Wraz ze wzrostem wielkości danych w instancji Jenkins, aplikacja wymaga również większego rozmiaru sterty.
  2. Jenkins może tymczasowo przetwarzać dużą ilość danych.
  3. Potencjalny wyciek pamięci w Jenkins.
  4. System hosta za brakuje pamięci wirtualnej.

Diagnozowanie głównej przyczyny OutofMemoryerror w Jenkins

Ustanowiliśmy cztery potencjalne przyczyny tego rodzaju błędu w Jenkins. Jak zawęzić główną przyczynę tego błędu?

W takim przypadku możemy użyć narzędzia takiego jak VisualVM, które pozwala nam wizualizować zużycie pamięci JVM w naszym systemie.

To narzędzie może wskazać główną przyczynę OutofMemoryerror podczas pracy z Jenkins.

Przejdź do następującego linku i pobierz najnowszą wersję urządzenia narzędzia VisualVM.

https: // visualVM.github.IO/

Po pobraniu uruchom aplikację i wybierz „Lokalny”, aby wyświetlić użycie JVM na komputerze lokalnym.

Powinno to pokazać szczegóły systemu, w tym dostępną pamięć fizyczną, pamięć zamiany i wiele innych.

Aby określić przyczynę tego błędu, zatrzymaj Jenkins i rozpocznij go ponownie, monitorując zużycie pamięci JVM na komputerze lokalnym.

Jeśli zużycie pamięci maksymalnie wychodzi podczas uruchamiania Jenkinsa, przyczyną jest mały rozmiar sterty.

Jeśli jednak użycie pamięci powoli wzrośnie, może to być potencjalny wyciek pamięci w wersji Jenkins.

Jeśli Jenkins używa całej dostępnej pamięci wirtualnej, t w jądrze hosta brakuje pamięci wirtualnej. Możesz to naprawić, zwiększając dostępną pamięć wirtualną lub kończąc działające kompilacje Jenkinsa.

Jak skonfigurować rozmiar sterty dla JVM

Jeśli masz do czynienia z OutofMemoryerror z powodu małego rozmiaru sterty, rozwiązaniem jest po prostu przydzielenie większego rozmiaru sterty.

Możemy skonfigurować początkowy i maksymalny rozmiar JVM za pomocą parametrów -xms i -xmx.

Uwaga: Zaleca się ustawienie tej samej wartości zarówno dla -xm, jak i XMX dla JVM.

Chociaż wystarczający rozmiar sterty może się różnić w zależności od dostępnych zasobów systemowych i obciążenia Jenkins, zaleca się ustawienie rozmiaru sterty na 2 GB (minimum) i 16 GB (maksymalnie).

Możesz zwiększyć rozmiar sterty dla Jenkins w Linux. Możesz edytować usługę uruchamiania Jenkins za pomocą następującego polecenia:

$ sudo systemctl edytuj Jenkins

Możesz także edytować plik usługi ręcznie, jak pokazano następująco:

sudo vim/usr/lib/systemd/system/Jenkins.praca

Znajdź opcję Java_Opts i dodaj opcje -xms i -xmx, jak pokazano następująco:

Środowisko = "java_opts = -djava.Awt.Headless = true -xms1g -xmx1g "

Dodanie poprzednich opcji zwiększ rozmiar pamięci sterty do 1 GB. Po zakończeniu możesz ponownie uruchomić usługę Jenkins w następujący sposób:

$ sudo systemCtl restartuj Jenkins

Możesz zwiększyć wartości -xms i xmx dla Jenkins w systemie Windows, edytując plik konfiguracyjny.

Domyślnie plik konfiguracyjny znajduje się w C: \ Program Files \ Jenkins \ Jenkins.XML.

Edytuj blok argumentów pliku XML, jak pokazano następująco:

Po zredagowaniu zapisz plik i uruchom ponownie usługę Jenkins.

Wniosek

Odkryłeś przyczynę OutofMemoryerror podczas pracy z Jenkins. Nauczyłeś się również, jak rozwiązywać problemy z różnymi przyczynami tego błędu. Wreszcie, teraz nauczyłeś się wielu metod go naprawić.