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 umiera, 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 wypisuje twój launcher albo panel hostingowy, nie gra. Przyczyna jest w logs/latest.log, a w przypadku awarii — w raporcie, który serwer zapisuje w crash-reports/. Czytaj log od końca, aż natrafisz 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 restart z harmonogramu |
| 1 | Watchdog zabił zawieszony tick, JVM odmówił startu albo launcher bądź loader modów zgłosił awarię |
| 137 | Zabity przez system operacyjny, 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 zawiódł; coś poza nim uznało, że proces zużył za dużo pamięci.
Java i Bedrock to nie ten sam problem
Dedykowany serwer Bedrock to inny program z własnym logowaniem, a porady pisane pod logi Java nie przełożą się na niego.
Zestawy z modami padają inaczej
Z modami pierwszy wyjątek jest często objawem. Mixin, który się nie zaaplikuje, wywołuje kaskadę, w której prawdziwym winowajcą jest pierwsza linia Mixin apply failed, a nie NoSuchMethodError trzydzieści linii dalej. Zanim zaczniesz szukać Exception, przeszukaj log pod kątem Mixin.
Sprawdzanie, czy serwer żyje
Log mówi ci, dlaczego umarł. Nie mówi, czy żyje teraz. Zapytanie o status na port serwera odpowiada na to jednym żądaniem. Narzędzie tutaj sprawdza serwery Java; Bedrock rozmawia przez UDP i potrzebuje własnego zapytania.
Wklej log do narzędzia Server Diagnostics, żeby wyciągnęło feralną linijkę, i skieruj je na swój host, by potwierdzić, że serwer faktycznie odpowiada.