รหัสออกไม่ใช่สาเหตุที่แครช มันแค่ยักไหล่
ตัวเลขนั้นไม่ได้บอกอะไรเลย แต่บรรทัดเหนือมันขึ้นไปบอกได้ทุกอย่าง และมันก็อยู่ในโฟลเดอร์ล็อกของคุณแล้ว
เซิร์ฟเวอร์ Java ที่ตายจะพิมพ์ Exit Code 1 แล้วหยุด แค่นั้นแหละข้อความทั้งหมด รหัสออก 1 หมายถึง "โปรเซสจบลงอย่างผิดปกติ" — มันเป็นหมวดหมู่ ไม่ใช่สาเหตุ และมันครอบคลุมทุกอย่างตั้งแต่โฟลเดอร์โลกหายไปจนถึงมอดที่โยนข้อผิดพลาดตอนโหลดคลาส
คำตอบจริงอยู่ที่ไหน
รหัสออกถูกพิมพ์โดยตัวเรียกเกมหรือแผงโฮสติ้งของคุณ ไม่ใช่โดยตัวเกม ส่วนสาเหตุอยู่ใน logs/latest.log และในกรณีที่แครช จะอยู่ในรายงานที่เซิร์ฟเวอร์บันทึกไว้ใต้ crash-reports/ ให้อ่านย้อนจากท้ายล็อกขึ้นมา直到เจอ Exception, Caused by: หรือ Failed to บรรทัดแรก บรรทัดนั้นจะบอกชื่อคลาส ชื่อมอด หรือชื่อไฟล์
[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 ในที่นี้คือ dependency ที่หายไป ไม่ใช่โลกที่เสียหาย รหัสออกไม่ได้บอกอะไรพวกนั้นเลย
รหัสออกที่คุณจะเจอจริง ๆ
| รหัส | ความหมายปกติ |
|---|---|
| 0 | ปิดอย่างสะอาด — /stop หรือการรีสตาร์ทตามกำหนด |
| 1 | watchdog สังหาร tick ที่ค้างอยู่, JVM ปฏิเสธที่จะเริ่ม, หรือตัวเรียกเกมหรือตัวโหลดมอดรายงานว่าแครช |
| 137 | ถูก OS สังหาร เกือบทุกครั้งคือ OOM killer |
| 143 | SIGTERM — ตัวจัดการคอนเทนเนอร์สั่งหยุด |
รหัส 137 คือรหัสที่คนมักอ่านผิดว่าเป็นแครช JVM ไม่ได้ล้มเหลว แต่มีบางสิ่งภายนอกมันตัดสินใจว่าโปรเซสใช้หน่วยความจำมากเกินไป
Java กับ Bedrock ไม่ใช่ปัญหาเดียวกัน
เซิร์ฟเวอร์เฉพาะของ Bedrock เป็นโปรแกรมคนละตัวที่มีการบันทึกล็อกของตัวเอง และคำแนะนำที่เขียนสำหรับล็อกของ Java ใช้กับมันไม่ได้
สแตกที่มีมอดล้มเหลวไม่เหมือนกัน
เมื่อมีมอด ข้อยกเว้นตัวแรกมักเป็นแค่อาการ mixin ที่ใช้ไม่สำเร็จจะก่อให้เกิดปฏิกิริยาลูกโซ่ โดยตัวการจริงคือบรรทัด Mixin apply failed แรก ไม่ใช่ NoSuchMethodError ที่อยู่ถัดไปสามสิบบรรทัด ให้ค้นในล็อกหา Mixin ก่อนที่จะหา Exception
ตรวจว่าเซิร์ฟเวอร์ยังทำงานอยู่ไหม
ล็อกบอกคุณว่ามันตายเพราะอะไร แต่มันไม่ได้บอกว่าตอนนี้มันยังมีชีวิตอยู่ไหม การสอบถามสถานะไปที่พอร์ตเซิร์ฟเวอร์ตอบคำถามนั้นได้ในคำขอเดียว เครื่องมือตรงนี้ตรวจเซิร์ฟเวอร์ Java ส่วน Bedrock สื่อสารผ่าน UDP และต้องใช้การสอบถามของตัวเอง
วางล็อกลงในเครื่องมือ Server Diagnostics เพื่อดึงบรรทัดที่ล้มเหลวออกมา และชี้มันไปที่โฮสต์ของคุณเพื่อยืนยันว่าเซิร์ฟเวอร์ตอบสนองจริง