ข้อผิดพลาด "Minecraft Payload May Not Be Larger": วิธีแก้ไขแพ็กเก็ตม็อดขนาดใหญ่เกินไป
ข้อผิดพลาด “Payload may not be larger”ใน Minecraft หมายความว่าไคลเอนต์ เซิร์ฟเวอร์ ม็อด หรือปลั๊กอินพยายามส่งแพ็กเก็ตเครือข่ายแบบกำหนดเองที่มีขนาดเกินขีดจำกัดที่กำหนดโดยเวอร์ชัน Minecraft หรือการใช้งานเครือข่ายนั้น หากข้อความระบุว่า1048576 bytes1 MiB นั่นหมายถึง 1 MiB วิธีแก้ไขคือระบุตัวม็อดหรือปลั๊กอินที่สร้างเพย์โหลดขนาดใหญ่เกินไป จากนั้นอัปเดต แก้ไขความไม่ตรงกันระหว่างไคลเอนต์/เซิร์ฟเวอร์ หรือลบออกจากโปรไฟล์ทดสอบที่สำรองไว้
นี่ไม่ใช่ปัญหาเกี่ยวกับขนาดไฟล์บันทึกโลก ปัญหาการขาดแคลนหน่วยความจำ Java heap หรือสิ่งที่จะแก้ไขได้ด้วยการฆ่ามอนสเตอร์ การเปลี่ยนค่าแฟล็กหน่วยความจำไม่ได้เพิ่มขีดจำกัดขนาดของแพ็กเก็ต การลดระยะการมองเห็นสามารถลดปริมาณการรับส่งข้อมูลของชิ้นส่วนแผนที่ได้ แต่ไม่ได้ทำให้เพย์โหลดแบบกำหนดเองที่มีขนาดใหญ่เกินไปนั้นใช้งานได้
ข้อผิดพลาดเกี่ยวกับเพย์โหลดหมายความว่าอย่างไร
Minecraft Java ใช้แพ็กเก็ตข้อมูลแบบกำหนดเองเพื่อส่งข้อมูลเพิ่มเติมระหว่างไคลเอนต์และเซิร์ฟเวอร์ ม็อดและปลั๊กอินเซิร์ฟเวอร์อาจใช้แพ็กเก็ตเหล่านี้สำหรับการซิงโครไนซ์ การกำหนดค่า เมนูที่ปรับแต่ง หรือคุณสมบัติอื่นๆ โค้ดแพ็กเก็ตของ Minecraft มีการตรวจสอบขนาดข้อมูล ตัวอย่างเช่น เอกสารอ้างอิงแพ็กเก็ตเวอร์ชัน 1.21 แสดงMAX_PAYLOAD_SIZEฟิลด์สำหรับแพ็กเก็ตข้อมูลแบบกำหนดเองที่ส่งไปยังไคลเอนต์ ตัวเลขที่แสดงในข้อผิดพลาดของคุณคือขีดจำกัดที่ใช้งานได้สำหรับความล้มเหลวนั้น มันอาจแตกต่างกันไปตามเวอร์ชัน ทิศทางของแพ็กเก็ต หรือตัวโหลด ดังนั้นอย่าคิดว่าข้อความ "ข้อมูลมีขนาดใหญ่เกินไป" ทุกข้อความมีขีดจำกัดเดียวกัน
ข้อผิดพลาดอาจปรากฏขึ้นในรูปแบบIllegalArgumentExceptionหรือภายในข้อความแสดงข้อผิดพลาดของ Netty DecoderExceptionข้อความแสดงข้อผิดพลาดนั้นเพียงอย่างเดียวไม่สามารถระบุสาเหตุได้ บรรทัดที่อยู่ด้านล่างในบันทึกของไคลเอนต์หรือเซิร์ฟเวอร์มักจะชี้ไปยังม็อด ปลั๊กอิน หรือตัวจัดการแพ็กเก็ตที่เกี่ยวข้อง
การวินิจฉัยเบื้องต้น: ควรเริ่มต้นจากตรงไหน
| เมื่อมันเกิดขึ้น | สิ่งที่ควรตรวจสอบก่อน |
| มีผู้เล่นเพียงคนเดียวที่หลุดการเชื่อมต่อ | ม็อดไคลเอ็นต์ของผู้เล่นนั้น, ส่วนประกอบที่จำเป็น และเวอร์ชันเกมและตัวโหลดที่แน่นอน |
| ผู้เล่นทุกคนล้มเหลวในขั้นตอนการเข้าร่วมหรือการโต้ตอบแบบเดียวกัน | การปรับแต่งหรือปลั๊กอินฝั่งเซิร์ฟเวอร์ การส่งต่อพร็อกซี และบันทึกเซิร์ฟเวอร์ |
| ปัญหานี้เกิดขึ้นหลังจากเปิดเมนู พื้นที่จัดเก็บ หรือเครื่องที่ถูกดัดแปลง | ม็อดที่เป็นเจ้าของหน้าจอหรือบล็อกนั้นและโค้ดการซิงค์ข้อมูลของมัน |
| มันเริ่มต้นหลังจากมีการอัปเดตหรือเปลี่ยนแพ็กเกจ | มีการเปลี่ยนแปลงเวอร์ชันของม็อด ลบส่วนประกอบที่จำเป็น หรือแพ็กเซิร์ฟเวอร์ไม่สมบูรณ์ |
นี่เป็นเพียงเบาะแส ไม่ใช่หลักฐานยืนยัน เปรียบเทียบเวลาเดียวกันในบันทึกของทั้งฝั่งไคลเอนต์และเซิร์ฟเวอร์ก่อนทำการเปลี่ยนแปลงไฟล์
วิธีแก้ไขข้อผิดพลาดขนาดเพย์โหลดใน Minecraft ทีละขั้นตอน
1. บันทึกเวอร์ชันต่างๆ และจำลองข้อผิดพลาด
จดบันทึกเวอร์ชัน Minecraft, ตัวโหลดและเวอร์ชันของตัวโหลด, เวอร์ชันของ Modpack, ซอฟต์แวร์เซิร์ฟเวอร์ และข้อความแสดงข้อผิดพลาดอย่างละเอียด จดบันทึกสิ่งที่คุณกำลังทำอยู่ก่อนที่จะเกิดการตัดการเชื่อมต่อ: การเข้าร่วม, การโหลดโลก, การเปิดเมนูเฉพาะ หรือการใช้บล็อกหรือไอเทมเฉพาะ ถ้าเป็นไปได้ ให้ทดสอบในสำเนาของอินสแตนซ์อื่นก่อน เพื่อให้คุณสามารถทำซ้ำการกระทำเดียวกันได้โดยไม่ต้องเสี่ยงกับโลกหลักของคุณ
2. ตรวจสอบบันทึกการทำงานของไคลเอนต์และเซิร์ฟเวอร์
เปิดlogs/latest.logไฟล์บันทึก (log) หรือเอาต์พุตคอนโซลโฮสติ้งล่าสุดของทั้งฝั่งไคลเอนต์และเซิร์ฟเวอร์ ค้นหาข้อความแสดงPayload may not be largerข้อผิดพลาด (exception) และการติดตามการทำงานของโปรแกรม (stack trace) จากนั้นตรวจสอบข้อความแสดงข้อผิดพลาดโดยรอบ มองหารหัสม็อด ชื่อปลั๊กอิน ชื่อช่อง หรือชื่อแพ็กเกจใกล้กับบรรทัดแรกๆ ที่เกี่ยวข้อง หากเกมสร้างรายงานข้อผิดพลาด ให้ตรวจสอบข้อผิดพลาดหลักและการติดตามการทำงานของโปรแกรมด้วย คู่มือของ Fabric อธิบายว่าlatest.logรายงานข้อผิดพลาดและการรายงานการทำงานถูกจัดเก็บไว้ที่ใดและวิธีการอ่านรายงาน คู่มือการแก้ไขปัญหาของ Paper แนะนำให้เริ่มต้นด้วยการติดตามการทำงานของเซิร์ฟเวอร์
สำหรับเซิร์ฟเวอร์ที่ให้บริการแบบโฮสต์ ให้ดาวน์โหลดบันทึกเซิร์ฟเวอร์จากแผงควบคุม อย่าเปิดเผยโทเค็นการตรวจสอบสิทธิ์ ที่อยู่ IP ส่วนตัว หรือรายละเอียดที่ละเอียดอ่อนอื่นๆ เมื่อเผยแพร่บันทึกต่อสาธารณะ
3. ตั้งค่าที่ดัดแปลงแล้วให้ตรงกันทั้งสองด้าน
ตรวจสอบให้แน่ใจว่าทั้งไคลเอนต์และเซิร์ฟเวอร์ใช้ Minecraft เวอร์ชันที่เข้ากันได้ และใช้ loader และเวอร์ชัน mod ที่จำเป็นเดียวกัน ตรวจสอบ dependency รวมถึง mod ที่ระบุชื่อด้วย mod บางตัวติดตั้งได้เฉพาะฝั่งไคลเอนต์ ในขณะที่บางตัวต้องติดตั้งทั้งสองฝั่ง อย่าคัดลอกไฟล์ไคลเอนต์ทั้งหมดไปยังโฟลเดอร์เซิร์ฟเวอร์โดยไม่ตรวจmodsสอบ ใช้คำแนะนำในการติดตั้งหรือคำแนะนำสำหรับแพ็คเซิร์ฟเวอร์จากผู้สร้างแพ็ค หากมีให้ คู่มือการติดตั้ง mod ของ Fabric แนะนำให้ตรวจสอบว่า mod นั้นรองรับ Minecraft เวอร์ชันและ loader ที่ตรงกันหรือไม่ เนื่องจาก mod สำหรับเวอร์ชันหนึ่งอาจใช้ไม่ได้กับอีกเวอร์ชันหนึ่ง
หากเซิร์ฟเวอร์เพิ่งได้รับการอัปเดต โปรดตรวจสอบให้แน่ใจว่าม็อดหรือปลั๊กอินต่างๆ ได้รับการอัปเดตให้เข้ากับเวอร์ชันเซิร์ฟเวอร์นั้นด้วย หากมีผู้เล่นเพียงคนเดียวที่ประสบปัญหา ให้เปรียบเทียบอินสแตนซ์ของผู้เล่นคนนั้นกับแพ็กที่ใช้งานได้ปกติของผู้เล่นคนอื่น แทนที่จะเปลี่ยนเซิร์ฟเวอร์ทั้งหมดก่อน
4. แยกแยะม็อดหรือปลั๊กอินที่เป็นต้นเหตุ
ก่อนทำการทดสอบ ให้สำรองข้อมูลไฟล์โลกและเซิร์ฟเวอร์ไว้ก่อน ในอินสแตนซ์ที่คัดลอกมาหรือเซิร์ฟเวอร์ทดสอบ ให้ปิดใช้งานม็อดหรือปลั๊กอินที่ระบุในบันทึก และรีสตาร์ททั้งสองฝั่งตามต้องการ หากไม่มีชื่อที่ชัดเจน ให้ลบม็อดที่ไม่จำเป็นออกประมาณครึ่งหนึ่งจากโปรไฟล์ทดสอบ รีสตาร์ท และทำซ้ำกับครึ่งที่ยังคงทำให้เกิดข้อผิดพลาด วิธีการ "แบ่งรายการ" นี้จะช่วยจำกัดชุดม็อดที่ต้องสงสัยได้เร็วกว่าการเปลี่ยนแปลงไฟล์หลายไฟล์พร้อมกัน
ทดสอบการกระทำเดียวกันหลังจากทำการเปลี่ยนแปลงแต่ละครั้ง หากลบม็อดเนื้อหา ให้คงโลกต้นฉบับไว้เหมือนเดิม: บล็อก ไอเท็ม หรือเอนทิตี้จากม็อดนั้นอาจหายไปในสำเนาทดสอบ กู้คืนไฟล์ต้นฉบับหากข้อผิดพลาดยังคงอยู่หรือการทดสอบทำให้เกิดปัญหาใหม่ บนเซิร์ฟเวอร์ Paper ให้ทดสอบการเปลี่ยนแปลงปลั๊กอินในสำเนา และใช้บันทึกเซิร์ฟเวอร์เพื่อระบุข้อผิดพลาดที่เกี่ยวข้องกับปลั๊กอิน
5. อัปเดต กำหนดค่า หรือลบสาเหตุเฉพาะนั้นออก
เมื่อคุณระบุตัวการที่น่าจะเป็นไปได้แล้ว ให้ตรวจสอบหน้าโครงการอย่างเป็นทางการเพื่อหาเวอร์ชันที่เข้ากันได้กับเวอร์ชัน Minecraft และตัวโหลดของคุณ อัปเดตม็อดและส่วนประกอบที่จำเป็นในเว็บไซต์ที่ถูกต้อง แล้วทดสอบอีกครั้ง หากข้อผิดพลาดเริ่มเกิดขึ้นหลังจากการอัปเดต ให้ทดสอบเวอร์ชันก่อนหน้าที่ใช้งานได้ดีในสำเนาแทน สำหรับปลั๊กอิน ให้ปฏิบัติตามเอกสารประกอบปัจจุบันและตรวจสอบปลั๊กอินเสริมหรือไลบรารีโปรโตคอลที่จำเป็น
หากนักพัฒนาซอฟต์แวร์ยืนยันว่าฟีเจอร์ใดฟีเจอร์หนึ่งส่งข้อมูลมากเกินไป ให้ปิดใช้งานหรือลดการใช้งานฟีเจอร์นั้นโดยใช้การตั้งค่าที่ระบุไว้ หรือรายงานบันทึกและขั้นตอนการจำลองปัญหาให้ผู้เขียนทราบ หลีกเลี่ยงการใช้โปรแกรมแก้ไขแพ็กเก็ตแบบสุ่ม การกำหนดค่าจำกัดแพ็กเก็ตที่ไม่ได้รับการบันทึกไว้ และการคัดลอกแฟล็ก JVM จากคู่มือที่ไม่เกี่ยวข้อง เพราะอาจซ่อนความไม่ตรงกันหรือสร้างปัญหาความเข้ากันได้ใหม่โดยไม่แก้ไขปัญหาที่ต้นเหตุ
เมื่อระยะการมองเห็นหรือการตั้งค่าหน่วยความจำมีความสำคัญ
เซิร์ฟเวอร์view-distanceควบคุมปริมาณข้อมูลโลกที่ส่งไปยังผู้เล่น โดยวัดเป็นรัศมีของชิ้นส่วนในserver.propertiesเอกสารอ้างอิงของ Paper การลดค่านี้อาจช่วยลดปริมาณการรับส่งข้อมูลชิ้นส่วนหรือเพิ่มประสิทธิภาพโดยรวม โดยเฉพาะอย่างยิ่งหากการตัดการเชื่อมต่อเกิดขึ้นพร้อมกับการโหลดชิ้นส่วนจำนวนมาก ค่านี้ไม่ได้เพิ่มขนาดสูงสุดของแพ็กเก็ตข้อมูลที่กำหนดเอง ในทำนองเดียวกัน ค่านี้simulation-distanceควบคุมระยะทางที่เอนทิตีถูกประมวลผล ไม่ใช่การตั้งค่าขนาดแพ็กเก็ต ควรเพิ่มหน่วยความจำ Java เฉพาะเมื่อบันทึกแสดงปัญหาหน่วยความจำจริง เช่น ข้อผิดพลาดหน่วยความจำไม่เพียงพอ
หากข้อผิดพลาดยังคงเกิดขึ้น
- ลองสร้างอินสแตนซ์ใหม่ที่สะอาดและแยกต่างหาก โดยไม่มีม็อดไคลเอ็นต์เพิ่มเติม จากนั้นเชื่อมต่อเข้ากับเซิร์ฟเวอร์เดียวกัน หากกฎของเซิร์ฟเวอร์อนุญาต
- สอบถามผู้ดูแลระบบเซิร์ฟเวอร์ว่าผู้เล่นคนอื่นสามารถพบข้อผิดพลาดนี้ได้หรือไม่ และโปรดแชร์เวลาที่ตรงกันจากบันทึกของเซิร์ฟเวอร์ด้วย
- โปรดส่งสำเนาบันทึกการทำงานทั้งหมดที่เกี่ยวข้อง เวอร์ชันที่แน่นอน และขั้นตอนที่ทำให้เกิดความล้มเหลว ให้กับผู้พัฒนา Mod หรือ Plugin
- เก็บสำเนาสำรองของโลกและชุดม็อดดั้งเดิมไว้จนกว่าการตั้งค่าที่แก้ไขแล้วจะโหลดและบันทึกสำเร็จ
วิธีแก้ไขปัญหาขนาดเพย์โหลดของ Minecraft ที่ได้ผลดีที่สุด คือการระบุผู้ส่งแพ็กเก็ตและแก้ไขเวอร์ชัน การกำหนดค่า หรือการจัดการข้อมูล ควรแยกการตั้งค่าประสิทธิภาพด้านระยะการมองเห็นและหน่วยความจำออกจากกัน ควรสำรองข้อมูลก่อนลบม็อดเนื้อหา และควรเปลี่ยนตัวแปรทีละตัวเพื่อให้ได้ผลลัพธ์ที่ชัดเจน
เอกสารประกอบ