Poradniki / Rozwiązywanie problemów
Kod wyjścia to nie powód awarii, to wzruszenie ramion
Liczba nie mówi ci nic. Linijka nad nią mówi wszystko — i już leży w twoim folderze z logami.
Serwer Java, który pada, wypisuje Exit Code 1 i się zatrzymuje. To cała wiadomość. Kod wyjścia 1 oznacza „proces zakończył się nieprawidłowo" — to kategoria, nie przyczyna, i obejmuje wszystko od brakującego folderu świata po moda, który rzuca wyjątkiem podczas ładowania klas.
Gdzie mieszka prawdziwa odpowiedź
Kod wyjścia to ostatnia linijka logs/latest.log. Przyczyna jest w linijkach przed nim. Czytaj od końca wstecz, aż trafisz na pierwszy Exception, Caused by: lub Failed to. Ta linijka wskazuje klasę, moda albo plik.
[Server thread/ERROR]: Encountered an unexpected exception
java.lang.NoSuchMethodError: net.minecraft.world.level.Level.getBiome
at com.example.mod.ExampleMixin.inject(ExampleMixin.java:41)
Caused by: java.lang.NoClassDefFoundError: com/example/lib/Helper
NoClassDefFoundError to tutaj brakująca zależność, a nie uszkodzony świat. Kod wyjścia nie powiedział ci o tym nic.
Kody wyjścia, które faktycznie zobaczysz
| Kod | Zwykłe znaczenie |
|---|---|
| 0 | Czyste zamknięcie — /stop albo zaplanowany restart |
| 1 | Nieobsłużony wyjątek albo JVM odmówiła startu |
| 137 | Zabity przez system, prawie zawsze przez OOM killer |
| 143 | SIGTERM — orkiestrator kontenerów go zatrzymał |
Kod 137 to ten, który ludzie błędnie odczytują jako awarię. JVM nie zawiodła; coś poza nią uznało, że proces zużył za dużo pamięci.
Java i Bedrock to nie ten sam problem
Serwer Bedrock zapisuje bedrock_server.log i w ogóle nie emituje kodu wyjścia w stylu Java — zrzuca raport crash handlera ze stack trace'em i linijką Crash report. Porady pisane pod logi Java nie przełożą się na niego.
Zmodyfikowane paczki padają inaczej
Z modami pierwszy wyjątek jest często objawem. Mixin, który nie chce się zaaplikować, produkuje kaskadę, w której prawdziwym winowajcą jest pierwsza linijka Mixin apply failed, a nie NoSuchMethodError trzydzieści linijek dalej. Przeszukaj log pod kątem Mixin, zanim zaczniesz szukać Exception.
Sprawdzanie, czy serwer żyje
Log mówi ci, dlaczego padł. Nie mówi, czy żyje teraz. Sprawdzenie TCP na porcie serwera odpowiada na to jednym żądaniem i działa tak samo dla Java i Bedrock, bo oba gadają przez socket.
Wklej log do narzędzia Server Diagnostics, żeby wyciągnęło feralną linijkę, i wskaż mu swój host, by potwierdzić, że serwer faktycznie odpowiada.