Minecraft Java Heap Space OutOfMemoryError: แก้ไขปัญหาเกมค้างอย่างปลอดภัย
หาก Minecraft Java Edition ปิดตัวลงด้วย ข้อความแสดงข้อผิดพลาด java.lang.OutOfMemoryError: Java heap spaceแสดงว่าเกมใช้หน่วยความจำฮีปเต็มแล้ว ตรวจสอบ-Xmxค่าหน่วยความจำฮีปที่มีอยู่ เพิ่มค่าเฉพาะเมื่อคอมพิวเตอร์หรือเซิร์ฟเวอร์ของคุณมีหน่วยความจำเพียงพอ และลดภาระงานลงหากปัญหายังคงเกิดขึ้น การเพิ่มหน่วยความจำ RAM โดยไม่ระมัดระวังอาจทำให้เกิดปัญหาหน่วยความจำอื่นๆ หรือเหลือหน่วยความจำไม่เพียงพอสำหรับระบบปฏิบัติการ
“พื้นที่ฮีปของ Java” หมายถึงอะไร
ฮีปของ Java คือกลุ่มหน่วยความจำที่เครื่องเสมือน Java (JVM) ใช้สำหรับวัตถุที่สร้างขึ้นขณะที่ Minecraft ทำงาน ตัวเลือก JVM -Xmxจะกำหนดขนาดสูงสุดของฮีป และ-Xmsกำหนดขนาดเริ่มต้น ค่าเหล่านี้เป็นค่าสูงสุดและจุดเริ่มต้นสำหรับกระบวนการ Java ไม่ใช่การรับประกันว่าจะมี RAM ทางกายภาพจำนวนเท่ากันว่างสำหรับ Minecraft ตลอดเวลา
ข้อความนี้แตกต่างจากข้อความแจ้งเตือนเมื่อคอมพิวเตอร์ใช้ RAM หมด การที่แผงควบคุมโฮสติ้งปิดกระบวนการทำงาน ข้อผิดพลาดเกี่ยวกับหน่วยความจำกราฟิก หรือคำเตือนเซิร์ฟเวอร์ “ไม่สามารถรับมือได้!” ปัญหาเหล่านี้อาจดูคล้ายกันในระหว่างการเล่น แต่การเปลี่ยนแปลง-Xmxอาจไม่ได้แก้ไขปัญหาเสมอไป คำแนะนำการสนับสนุนปัจจุบันของ Minecraft ระบุว่า การจัดสรรหน่วยความจำที่ไม่ตรงกันอาจทำให้เกิดการขัดข้อง ความหน่วง และการกระตุก และแนะนำให้ผู้เล่น Java Edition ตรวจสอบอาร์กิวเมนต์ JVM ของ Launcher อ่านคู่มือการแก้ไขปัญหาการจัดสรรหน่วยความจำของ Minecraft
ตรวจสอบข้อผิดพลาดก่อนทำการเปลี่ยนแปลงการตั้งค่า
- มองหาบรรทัดที่ตรงกัน
java.lang.OutOfMemoryError: Java heap spaceในรายงานข้อผิดพลาดlatest.logหรือคอนโซลของเซิร์ฟเวอร์
- โปรดสังเกตว่าเหตุการณ์นี้เกิดขึ้นในโลกเดียว หลังจากสำรวจภูมิประเทศใหม่ เมื่อใช้ชุดม็อด หรือเฉพาะเมื่อมีผู้เล่นออนไลน์หลายคนเท่านั้น
- หากกระบวนการหยุดทำงานโดยไม่มีข้อผิดพลาดเกี่ยวกับหน่วยความจำ Java ให้ตรวจสอบระบบปฏิบัติการหรือแผงควบคุมโฮสติ้งเพื่อหาสาเหตุการปิดกระบวนการเนื่องจากหน่วยความจำไม่เพียงพอ ขีดจำกัดหน่วยความจำของโฮสต์อาจต่ำกว่าหน่วยความจำที่กำหนดค่าไว้ของเซิร์ฟเวอร์บวกกับหน่วยความจำที่ Java ต้องการนอกเหนือจากหน่วยความจำฮีป
- สำรองข้อมูลโลกในโหมดเล่นคนเดียวหรือโลกเซิร์ฟเวอร์ก่อนทำการเปลี่ยนแปลงม็อด โหลดเดอร์ หรือไฟล์เซิร์ฟเวอร์
อาการค้างหรือกระตุกซ้ำๆ อาจเกิดขึ้นพร้อมกับปัญหาหน่วยความจำไม่เพียงพอ แต่ไม่ได้หมายความว่าหน่วยความจำ Java heap เต็มเสมอไป ควรพิจารณารายงานข้อผิดพลาดหรือบันทึกการทำงานของโฮสต์เป็นหลักฐานชี้ขาด
ขั้นตอนที่ 1: กำหนดขนาดฮีปที่เหมาะสมสำหรับไคลเอ็นต์
- เปิด Minecraft Launcher แล้วไปที่Installations
- แก้ไขโปรไฟล์ที่คุณใช้งานจริง จากนั้นเปิดตัวเลือกเพิ่มเติมแล้วค้นหาอาร์กิวเมนต์ JVMเค้าโครงของ Launcher อาจเปลี่ยนแปลงได้ โปรดดูคำแนะนำการสนับสนุนของ Minecraft หากป้ายกำกับแตกต่างกัน
- ค้นหา
-Xmxการตั้งค่าที่มีอยู่แล้ว เปลี่ยนค่าดังกล่าวแทนที่จะเพิ่มค่าที่สอง-Xmxหรือแทนที่ช่องอาร์กิวเมนต์ทั้งหมด
- บันทึกโปรไฟล์ เปิด Minecraft แล้วตรวจสอบดูว่าโลกหรือกิจกรรมเดิมยังคงทำให้เกิดข้อผิดพลาดหรือไม่
ตัวอย่างเช่น-Xmx4Gตั้งค่าฮีปสูงสุดไว้ที่ 4 GB นี่เป็นเพียงตัวอย่าง ไม่ใช่คำแนะนำทั่วไป การติดตั้งแบบพื้นฐานอาจต้องการหน่วยความจำน้อยกว่าชุดม็อดขนาดใหญ่ ในขณะที่ผู้ดูแลชุดม็อดอาจเผยแพร่ช่วงหน่วยความจำที่เฉพาะเจาะจง เพิ่มค่าสูงสุดทีละน้อยอย่างระมัดระวังก็ต่อเมื่อเครื่องมีพื้นที่เหลือเฟือเท่านั้น เว้นหน่วยความจำไว้สำหรับระบบปฏิบัติการ ตัวเรียกใช้งาน การแชทด้วยเสียง เบราว์เซอร์ และความต้องการที่ไม่ใช้ฮีปของ Java
ข้อกำหนดระบบที่ Mojang เผยแพร่ ระบุว่า RAM ระบบ 16 GB เป็นค่าพื้นฐานที่แนะนำ นั่นคือหน่วยความจำคอมพิวเตอร์ทั้งหมด ไม่ใช่คำสั่งให้ Minecraft ใช้ฮีป 16 GB ในคอมพิวเตอร์ที่มีหน่วยความจำน้อย อย่าจัดสรร RAM ทางกายภาพเกือบทั้งหมดให้กับ-XmxMinecraft หากเกมใช้ฮีปในปริมาณที่เหมาะสมอยู่แล้วและข้อผิดพลาดชี้ไปที่ม็อดตัวใดตัวหนึ่ง ให้ทดสอบชุดม็อดที่เข้ากันได้และอัปเดตแล้วก่อนที่จะเพิ่มขีดจำกัดอีกครั้ง
ขั้นตอนที่ 2: เลือก Java runtime ให้ตรงกับเวอร์ชันของ Minecraft
ใช้รันไทม์ที่จัดหาให้หรือเลือกโดย Launcher อย่างเป็นทางการสำหรับเวอร์ชันเกม เว้นแต่เอกสารของ Minecraft หรือ mod-loader จะบอกให้คุณกำหนดค่ารันไทม์อื่นที่รองรับ การใช้ไฟล์ปฏิบัติการ Java ที่ไม่ตรงกันหรือถูกแก้ไขด้วยตนเองอาจทำให้การแก้ไขปัญหาทำได้ยากขึ้น ตัวอย่างเช่น บันทึกการเผยแพร่ Minecraft Java Edition 26.1 ของ Mojang ระบุว่าการเผยแพร่ดังกล่าวต้องการ Java 25 อย่าใช้ข้อกำหนดนั้นกับทุกเวอร์ชันเก่ากว่า ตรวจสอบบันทึกการเผยแพร่ 26.1 อย่างเป็นทางการและข้อกำหนดสำหรับเวอร์ชันที่คุณกำลังใช้งานจริง
อัปเดต Minecraft และตัวโหลดหรือม็อดที่เกี่ยวข้องจากแหล่งที่มาอย่างเป็นทางการ หากเกมล่มทันทีหลังจากการอัปเดต ให้ลองทดสอบสำเนาของโลกที่มีชุดม็อดที่เข้ากันได้ล่าสุดแทนที่จะเปิดโลกเดียวของคุณด้วยเวอร์ชันที่แตกต่างกัน
ขั้นตอนที่ 3: กำหนดขนาดฮีปของเซิร์ฟเวอร์ให้ต่ำกว่าขีดจำกัดหน่วยความจำจริง
สำหรับเซิร์ฟเวอร์ Java ที่ติดตั้งเอง ให้แก้ไขคำสั่งหรือสคริปต์การเริ่มต้น (ไม่ใช่) เพื่อserver.propertiesตั้งค่าตัวเลือกฮีป คำสั่งตัวอย่างเล็กๆ น้อยๆ มีดังนี้:
java -Xms2G -Xmx4G -jar server.jar nogui
แทนที่server.jarด้วยชื่อไฟล์เซิร์ฟเวอร์จริงและเลือกค่าที่เหมาะสมกับโฮสต์-Xms2Gคือฮีปเริ่มต้นในตัวอย่างนี้-Xmx4Gคือฮีปสูงสุด กระบวนการนี้ยังต้องการหน่วยความจำนอกฮีป Java ด้วย ดังนั้นขีดจำกัดหน่วยความจำทั้งหมดของโฮสต์ควรสูงกว่า-Xmxสำหรับโฮสต์แบบจัดการ ให้ตรวจสอบขีดจำกัดและการตั้งค่าเริ่มต้นของแผนแทนที่จะสันนิษฐานว่าจำนวนผู้เล่นที่แสดงเป็นตัวกำหนดความต้องการหน่วยความจำ
คำแนะนำในการแก้ไขปัญหาของ Paper ระบุว่าเซิร์ฟเวอร์อาจถูกปิดเมื่อขีดจำกัดของแผงควบคุมโฮสติ้งใกล้ถึงขีดจำกัดสูงสุดมากเกินไป-Xmxโดยแนะนำให้ลดขีดจำกัดสูงสุดลง 1-2 GB เป็นการวินิจฉัยเบื้องต้น หรือสอบถามผู้ให้บริการโฮสติ้งเกี่ยวกับขีดจำกัดดังกล่าว คำแนะนำนี้ใช้กับกระบวนการที่ถูกปิดโดยโฮสต์ ซึ่งไม่เหมือนกับข้อความแสดงข้อผิดพลาดเกี่ยวกับพื้นที่หน่วยความจำฮีปของ Java โปรดดูเอกสารการแก้ไขปัญหาเซิร์ฟเวอร์ของ Paper
ขั้นตอนที่ 4: ลดปริมาณงานที่ใช้หน่วยความจำ
- ลดระยะการแสดงผล:ลองลดระยะการมองเห็นของไคลเอนต์ โดยเฉพาะอย่างยิ่งขณะสำรวจหรือโหลดโลกขนาดใหญ่
- ลดระยะห่างของเซิร์ฟเวอร์:ใน Paper ให้ตรวจสอบ
view-distanceและsimulation-distanceตั้งค่าในส่วนนี้server.propertiesค่าเหล่านี้ควบคุมระยะการส่งข้อมูลและการจำลองของเซิร์ฟเวอร์ ลดค่าเหล่านี้ทีละน้อยและตรวจสอบการเล่นเกม ดูข้อมูลอ้างอิงคุณสมบัติเซิร์ฟเวอร์ของ Paper
- แยกม็อด:ทดสอบชั่วคราวกับสำเนาสำรองที่ไม่มีม็อด จากนั้นค่อยๆ ติดตั้งม็อดที่เข้ากันได้ทีละกลุ่มเล็กๆ หากเกิดข้อผิดพลาดกับกลุ่มใดกลุ่มหนึ่ง จะช่วยจำกัดขอบเขตการค้นหา อย่าคิดว่าม็อดปรับปรุงประสิทธิภาพทุกตัวจะช่วยลดการใช้ Java heap ได้
- ตรวจสอบแพ็กทรัพยากรและเชเดอร์:ปิดใช้งานแพ็กทรัพยากรหรือเชเดอร์ความละเอียดสูงชั่วคราวขณะทำการวินิจฉัย ปัญหาบางอย่างเกี่ยวกับกราฟิกใช้ GPU หรือหน่วยความจำเนทีฟ ดังนั้นการเพิ่ม Java heap อาจไม่สามารถแก้ไขปัญหาได้
- ตรวจสอบภาระงานของเซิร์ฟเวอร์:หากข้อผิดพลาดเกิดขึ้นหลังจากพื้นที่ใดพื้นที่หนึ่งหรือจำนวนผู้เล่นเพิ่มขึ้นอย่างฉับพลัน ให้ตรวจสอบส่วนของแผนที่ เอนทิตี้ ปลั๊กอิน และกราฟหน่วยความจำของโฮสต์ ลบหรืออัปเดตปลั๊กอินที่มีปัญหาหลังจากตรวจสอบความเข้ากันได้และสำรองข้อมูลโลกแล้วเท่านั้น
ขั้นตอนที่ 5: ทำการเปลี่ยนแปลง JVM ให้เรียบง่ายและตรวจสอบผลลัพธ์
อย่าคัดลอกชุดแฟล็กการจัดการขยะแบบทดลองจำนวนมากจากคู่มือเก่ามาใช้เป็นวิธีแก้ปัญหาเบื้องต้น Java รุ่นใหม่เลือกตัวจัดการขยะและจัดการพฤติกรรมของฮีปอยู่แล้ว แฟล็กไม่สามารถทำให้ RAM ทางกายภาพปรากฏขึ้นได้ และตัวจัดการขยะที่แตกต่างกันไม่สามารถแก้ไขปัญหาการรั่วไหลของโมดูลหรือข้อจำกัดของโฮสต์ได้ เอกสารของ Oracle -Xmxระบุการตั้งค่าฮีปสูงสุดและอธิบายว่าการปรับแต่งการจัดการขยะขึ้นอยู่กับแอปพลิเคชันและหน่วยความจำที่มีอยู่ ดูได้จากเอกสารอ้างอิงคำสั่ง Java
หลังจากทำการเปลี่ยนแปลงแต่ละครั้ง ให้รีสตาร์ทเกมหรือเซิร์ฟเวอร์ใหม่ทั้งหมด แล้วทำซ้ำขั้นตอนเดิม เปลี่ยนการตั้งค่าทีละอย่างและจดบันทึกผลลัพธ์ หากข้อผิดพลาดเกี่ยวกับฮีปยังคงเกิดขึ้นแม้ว่าจะตั้งค่าสูงสุดที่เหมาะสมแล้ว ให้บันทึกรายงานข้อผิดพลาดและมองหา mod หรือคลาส Minecraft ตัวแรกที่ระบุใน stack trace หากไม่มีข้อผิดพลาดเกี่ยวกับฮีปของ Java ให้ตรวจสอบระบบปฏิบัติการ การ์ดจอ ตัวเรียกใช้งาน หรือแผงควบคุมโฮสติ้งแทนที่จะเพิ่มค่าต่อ-Xmxไป
คำถามที่พบบ่อย
การเพิ่ม RAM จะช่วยแก้ปัญหา OutOfMemoryError ใน Minecraft ได้เสมอหรือไม่?
ไม่ การเพิ่มค่า-Xmxอาจช่วยได้เมื่อขีดจำกัดหน่วยความจำสูงสุดของ Java heap ต่ำเกินไปและเครื่องมีหน่วยความจำที่ไม่ได้ใช้งาน แต่จะไม่สามารถแก้ไขปัญหาหน่วยความจำรั่วไหล การปิดระบบปฏิบัติการ โควต้าโฮสติ้ง หรือปัญหาหน่วยความจำกราฟิกได้
ฉันควรตั้งค่าให้-Xmsเท่ากับหรือ-Xmxไม่?
ไม่ใช่แบบอัตโนมัติ ระบบ-Xmsจะตั้งค่าฮีปเริ่มต้นและ-Xmxค่าสูงสุด คงค่าพารามิเตอร์อื่นๆ ของ Launcher ไว้ เว้นแต่คุณจะรู้ว่าทำไมจึงต้องเปลี่ยนแปลง Minecraft ไม่ได้กำหนดให้ผู้เล่นทุกคนต้องตั้งค่าเหล่านี้ให้เหมือนกัน
ทำไมเซิร์ฟเวอร์ถึงล่มแม้ว่า-Xmxจะใช้งานต่ำกว่าขีดจำกัดของแพ็กเกจโฮสติ้งก็ตาม?
Java ใช้หน่วยความจำนอกฮีป และระบบปฏิบัติการและบริการอื่นๆ ก็ต้องการ RAM ด้วยเช่นกัน ตรวจสอบขีดจำกัดของกระบวนการหรือคอนเทนเนอร์ที่ใช้งานจริงของโฮสต์และบันทึกการหยุดทำงาน สอบถามผู้ให้บริการเพื่อยืนยันหน่วยความจำที่ใช้งานได้หากแผงควบคุมไม่แสดงรายละเอียดเหล่านั้น