Çıkış kodu bir çökme nedeni değil, bir omuz silkmektir
Sayı sana hiçbir şey söylemez. Üstündeki satır her şeyi söyler ve o satır zaten log klasöründe duruyor.
Ölen bir Java sunucusu Exit Code 1 yazdırır ve durur. Mesajın tamamı budur. Çıkış kodu 1 "süreç anormal şekilde sonlandı" demektir — bu bir kategori, bir neden değildir ve eksik bir dünya klasöründen sınıf yüklemesi sırasında hata fırlatan bir moda kadar her şeyi kapsar.
Gerçek cevabın yaşadığı yer
Çıkış kodunu oyun değil, başlatıcın veya barındırma panelin yazdırır. Neden logs/latest.log içindedir ve bir çökme durumunda sunucunun crash-reports/ altında kaydettiği rapordadır. Logun sonundan geriye doğru, ilk Exception, Caused by: veya Failed to satırına gelene kadar oku. O satır sana sınıfın, modun veya dosyanın adını verir.
[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
Buradaki NoClassDefFoundError bozuk bir dünya değil, eksik bir bağımlılıktır. Çıkış kodu sana bunların hiçbirini söylemedi.
Gerçekten karşılaşacağın çıkış kodları
| Kod | Olağan anlamı |
|---|---|
| 0 | Temiz kapanış — /stop veya planlanmış bir yeniden başlatma |
| 1 | Watchdog takılan bir tick'i öldürdü, JVM başlamayı reddetti ya da bir başlatıcı veya mod yükleyici bir çökme bildirdi |
| 137 | İşletim sistemi tarafından öldürüldü, neredeyse her zaman OOM killer |
| 143 | SIGTERM — bir konteyner orkestratörü durdurdu |
İnsanların çökme olarak yanlış okuduğu kod 137'dir. Başarısız olan JVM değildir; onun dışındaki bir şey sürecin çok fazla bellek kullandığına karar vermiştir.
Java ve Bedrock aynı sorun değildir
Bedrock'un dedicated sunucusu kendi loglaması olan farklı bir programdır ve Java logları için yazılmış tavsiyeler ona uymaz.
Modlu kurulumlar farklı şekilde çöker
Modlarla birlikte ilk istisna çoğu zaman bir belirtidir. Uygulanamayan bir mixin, gerçek suçlunun otuz satır sonraki NoSuchMethodError değil ilk Mixin apply failed satırı olduğu bir zincirleme tepki üretir. Exception aramadan önce logda Mixin ara.
Sunucunun ayakta olup olmadığını kontrol etmek
Bir log sana neden öldüğünü söyler. Şu anda canlı olup olmadığını söylemez. Sunucu portuna yapılan bir durum sorgusu bunu tek istekte yanıtlar. Buradaki araç Java sunucularını kontrol eder; Bedrock UDP konuşur ve kendi sorgusuna ihtiyaç duyar.
Logu Server Diagnostics aracına yapıştırarak hatalı satırı çıkarttır ve sunucunun gerçekten yanıt verdiğini doğrulamak için aracı sunucuna yönlendir.