แก้ “OutOfMemoryError: Java heap space” และ “Could not reserve enough space” บนเซิร์ฟเวอร์ Minecraft

มีปัญหาสามแบบที่ถูกเรียกว่า “out of memory” ถ้าเซิร์ฟเวอร์สตาร์ตไม่ขึ้นและพูดถึง object heap แปลว่าคุณขอ RAM ให้ Java มากกว่าที่เครื่องมี ถ้ามันรันแล้วแครชด้วย OutOfMemoryError แปลว่ามันต้องการมากกว่าที่คุณให้ หรือมีบางอย่างรั่ว ถ้ามันขึ้นแค่ “Killed” แปลว่าระบบปฏิบัติการปิดมัน

โดยทีม Nodewave · อัปเดต 8 พฤศจิกายน 2026

คุณเจอข้อผิดพลาดแบบไหน

ข้อความความหมาย
Could not reserve enough space for object heapตอนสตาร์ต: -Xmx มากกว่าหน่วยความจำที่มี หรือคุณใช้ Java แบบ 32 บิต
java.lang.OutOfMemoryError: Java heap spaceระหว่างรัน: heap เต็ม เซิร์ฟเวอร์ต้องการหน่วยความจำมากขึ้นหรือโหลดน้อยลง หรือมีหน่วยความจำรั่ว
GC overhead limit exceededJava ใช้เวลาเกือบทั้งหมดไปกับการเคลียร์หน่วยความจำ สาเหตุเดียวกับ heap เต็ม
“Killed” หรือ exit code 137ระบบปฏิบัติการหรือคอนเทนเนอร์ปิดเซิร์ฟเวอร์เพราะทั้งเครื่องหน่วยความจำหมด

Could not reserve enough space for object heap

  1. ตรวจหน่วยความจำที่ว่าง บน Linux ให้รัน free -h บน Windows ให้เปิด Task Manager
  2. ลด -Xmx Java ใช้มากกว่า heap ดังนั้นบนเครื่องเล็กให้ตั้ง -Xmx ไม่เกินราวสามในสี่ของ RAM บนเซิร์ฟเวอร์ 4 GB ค่า 3G เป็นเพดานที่ปลอดภัย
  3. ใช้ Java แบบ 64 บิต เอาต์พุตของ java -version ควรบอกว่า 64-Bit Java แบบ 32 บิตจองเฮปใหญ่ไม่ได้
java -Xms3G -Xmx3G -jar server.jar --nogui

ตั้ง -Xms ให้เท่ากับ -Xmx เพื่อให้เซิร์ฟเวอร์จองหน่วยความจำครั้งเดียวตอนเริ่ม

java.lang.OutOfMemoryError: Java heap space

  1. ให้หน่วยความจำเซิร์ฟเวอร์มากขึ้น ถ้าเครื่องมี ดู เซิร์ฟเวอร์ Minecraft ต้องใช้ RAM เท่าไร สำหรับขนาดตามประเภทเซิร์ฟเวอร์
  2. ลดภาระ ลด view-distance และ simulation-distance ใน server.properties เช่นเป็น 8 และ 6
  3. หาจุดรั่ว ติดตั้งปลั๊กอินหรือม็อด spark ปล่อยให้เซิร์ฟเวอร์รันจนหน่วยความจำสูง แล้วรัน /spark heapsummary มันแสดงรายการสิ่งที่ใช้หน่วยความจำมากที่สุด คลาสจากปลั๊กอินตัวเดียวที่อยู่บนสุดของรายการชี้ไปที่ตัวการ
  4. อัปเดตหรือลบตัวการ หน่วยความจำรั่วมักถูกแก้ในปลั๊กอินเวอร์ชันใหม่ การให้หน่วยความจำเพิ่มแก่ปลั๊กอินที่รั่วแค่ยืดเวลาการแครชออกไป
  5. รีสตาร์ตตามตารางเวลา การรีสตาร์ตทุกวันซ่อนจุดรั่วช้าๆ จนกว่าคุณจะหาเจอ เป็นแค่ทางแก้ชั่วคราว ไม่ใช่การแก้จริง

“Killed” และ exit code 137

นี่ไม่ใช่ข้อผิดพลาดของ Java บน Linux ตัวฆ่าโพรเซสเมื่อหน่วยความจำหมด (out-of-memory killer) จะปิดโพรเซสที่ใหญ่ที่สุดเมื่อทั้งเครื่องหน่วยความจำหมด และคอนเทนเนอร์ก็ทำแบบเดียวกันที่ขีดจำกัดหน่วยความจำ ยืนยันได้ในล็อกเคอร์เนล:

sudo dmesg | grep -i "killed process"

วิธีแก้คือลด -Xmx เพื่อให้ Java รวมกับทุกอย่างบนเครื่องพอดีกับ RAM และปิดซอฟต์แวร์อื่นที่กินหน่วยความจำ เช่นฐานข้อมูลหรือเซิร์ฟเวอร์เกมตัวที่สอง ไฟล์ swap ขนาดเล็กเป็นตาข่ายนิรภัย แต่ไม่ใช่ตัวแทนของ RAM

ป้องกันไม่ให้กลับมาอีก

โฮสต์เซิร์ฟเวอร์ Minecraft ของคุณในสิงคโปร์

ปิงต่ำสำหรับผู้เล่นในอินเดีย มาเลเซีย และอินโดนีเซีย บนคอร์ AMD EPYC ที่เร็ว พร้อม NVMe และการป้องกัน DDoS

โฮสติ้ง Minecraft ในสิงคโปร์ →