Exit code ไม่ใช่สาเหตุที่แครช มันแค่ยักไหล่
ตัวเลขนั้นไม่ได้บอกอะไรคุณเลย แต่บรรทัดเหนือขึ้นไปต่างหากที่บอกทุกอย่าง และมันก็อยู่ในโฟลเดอร์ log ของคุณแล้ว
เซิร์ฟเวอร์ Java ที่ตายจะพิมพ์ Exit Code 1 แล้วหยุด แค่นั้นคือข้อความทั้งหมด Exit code 1 หมายถึง "โปรเซสจบลงอย่างผิดปกติ" — มันเป็นแค่หมวดหมู่ ไม่ใช่สาเหตุ และมันครอบคลุมทุกอย่างตั้งแต่โฟลเดอร์ world ที่หายไป ไปจนถึงมอดที่ throw ระหว่างโหลดคลาส
คำตอบจริงอยู่ที่ไหน
Exit code คือบรรทัดสุดท้ายของ logs/latest.log ส่วนสาเหตุอยู่ในบรรทัดก่อนหน้านั้น ให้อ่านย้อนจากท้ายขึ้นมา直到เจอ 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 ที่หายไป ไม่ใช่ world ที่เสียหาย Exit code ไม่ได้บอกอะไรพวกนั้นเลย
Exit code ที่คุณจะเจอจริง ๆ
| Code | ความหมายทั่วไป |
|---|---|
| 0 | ปิดอย่างสะอาด — /stop หรือการรีสตาร์ทตามกำหนด |
| 1 | exception ที่ไม่ได้จัดการ หรือ JVM ปฏิเสธที่จะเริ่ม |
| 137 | ถูก OS สั่งฆ่า เกือบทุกครั้งคือ OOM killer |
| 143 | SIGTERM — container orchestrator สั่งหยุด |
Code 137 คือตัวที่คนมักอ่านผิดว่าเป็นแครช JVM ไม่ได้พัง แต่มีอะไรบางอย่างภายนอกตัดสินใจว่าโปรเซสใช้หน่วยความจำมากเกินไป
Java กับ Bedrock ไม่ใช่ปัญหาเดียวกัน
เซิร์ฟเวอร์ Bedrock เขียน bedrock_server.log และไม่ปล่อย exit code แบบ Java เลย — มันจะดัมป์ crash handler report พร้อม stack trace และบรรทัด Crash report คำแนะนำที่เขียนสำหรับ log ของ Java ใช้กับมันไม่ได้
สแต็กที่มีมอดพังไม่เหมือนกัน
เมื่อมีมอด exception แรกมักเป็นแค่อาการ mixin ที่ apply ไม่สำเร็จจะสร้าง cascade ที่ตัวการจริงคือบรรทัด Mixin apply failed แรก ไม่ใช่ NoSuchMethodError ที่อยู่ถัดไปสามสิบบรรทัด ให้ค้น log หา Mixin ก่อนที่จะค้นหา Exception
เช็คว่าเซิร์ฟเวอร์ยังอยู่ไหม
Log บอกคุณว่ามันตายทำไม แต่ไม่ได้บอกว่าตอนนี้มันยังมีชีวิตอยู่ไหม การเช็ค TCP ไปที่พอร์ตเซิร์ฟเวอร์ตอบคำถามนั้นได้ในคำขอเดียว และใช้ได้เหมือนกันทั้ง Java และ Bedrock เพราะทั้งคู่สื่อสารผ่าน socket
วาง log ลงในเครื่องมือ Server Diagnostics เพื่อดึงบรรทัดที่พังออกมา และชี้ไปที่โฮสต์ของคุณเพื่อยืนยันว่าเซิร์ฟเวอร์ตอบสนองจริง