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:
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:
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ć.