Minecraft “Can't keep up! Is the server overloaded?”: วิธีแก้เซิร์ฟเวอร์แลค
คำเตือนในคอนโซลนี้หมายความว่าเซิร์ฟเวอร์ทำงานไม่ทันและตามหลังไป นานๆ ครั้งไม่เป็นไร แต่ถ้าขึ้นซ้ำเรื่อยๆ ผู้เล่นจะเจออาการ rubber-banding มอนสเตอร์เคลื่อนที่ช้า และบล็อกที่ทุบแล้วกลับมาเหมือนเดิม นี่คือวิธีหาสาเหตุและแก้
คำเตือนนี้หมายถึงอะไร
เซิร์ฟเวอร์ Minecraft รัน 20 tick ต่อวินาที แต่ละ tick จึงมี 50 มิลลิวินาที ถ้า tick ใช้เวลานานกว่านั้น เซิร์ฟเวอร์จะตามหลังและแสดงว่าช้าไปเท่าไร เช่น “Running 2500ms or 50 ticks behind” ตัวเลขสองตัวบอกว่าเซิร์ฟเวอร์สุขภาพดีแค่ไหน:
- TPS (tick ต่อวินาที): 20 คือสมบูรณ์แบบ ต่ำกว่า 18 ผู้เล่นจะเริ่มรู้สึก
- MSPT (มิลลิวินาทีต่อ tick): ต่ำกว่า 50 แปลว่าเซิร์ฟเวอร์ทำทัน และยิ่งต่ำยิ่งมีเหลือเผื่อ
คำเตือนหนึ่งหรือสองครั้งตอนเซิร์ฟเวอร์เพิ่งเริ่ม หรือหลังเปลี่ยนแปลงโลกครั้งใหญ่ ถือว่าปกติ แต่คำเตือนซ้ำๆ ระหว่างเล่นไม่ปกติ
1. วัดก่อนเปลี่ยนอะไร
Paper มี profiler ชื่อ spark ติดมาด้วย ในคอนโซล หรือในเกมโดยใส่ทับ (/) นำหน้า:
spark tps spark profiler start --timeout 600
spark tps แสดง TPS และ MSPT ตัว profiler จะรัน 10 นาที แล้วให้ลิงก์รายงานที่แสดงว่าเวลา tick หมดไปกับอะไร: ปลั๊กอินไหน entity ไหน การสร้าง chunk หรือ redstone บนเซิร์ฟเวอร์ vanilla คำสั่ง /tick query แสดงเวลา tick และ spark ก็มีเป็นม็อดสำหรับ Fabric และ Forge ด้วย
2. สร้างโลกล่วงหน้า
การสร้าง chunk ใหม่เป็นงานที่หนักที่สุดอย่างหนึ่งของเซิร์ฟเวอร์ และผู้เล่นที่สำรวจเร็ว เช่น บินด้วย elytra จะสร้าง chunk จำนวนมาก สร้างพื้นที่ที่ผู้เล่นจะใช้ไว้ก่อนด้วยปลั๊กอิน Chunky แล้วตั้งขอบโลกให้ตรงกัน:
chunky radius 5000 chunky start worldborder set 10000
รันตอนเซิร์ฟเวอร์เงียบ รัศมีกว้างอาจใช้เวลาหลายชั่วโมง
3. ลดระยะมองเห็นและระยะจำลอง
ใน server.properties ค่า view-distance กำหนดว่าผู้เล่นมองเห็นได้ไกลแค่ไหน และ simulation-distance กำหนดว่าโลกรอบตัวพวกเขาทำงานจริงไกลแค่ไหน: มอนสเตอร์เคลื่อนที่ พืชโต และ redstone ทำงาน การลด simulation-distance เหลือ 6 หรือ 8 ช่วยประหยัดงานได้มาก ขณะที่ผู้เล่นยังมองเห็นได้ไกล
4. จัดการ entity และฟาร์ม
- ฟาร์มมอนสเตอร์ขนาดใหญ่และคอกสัตว์ entity หลายร้อยตัวในที่เดียวคือสาเหตุคลาสสิก ตกลงจำนวนสัตว์สูงสุดต่อผู้เล่น และเคลียร์ส่วนเกิน
- ไอเทมที่ตกพื้นและลูกแก้วประสบการณ์ ฟาร์มที่ทำของตกโดยไม่มีใครเก็บจะทำให้มี entity ค้างอยู่จำนวนมาก
- วงจรนาฬิกา redstone และ hopper วงจรที่ไม่เคยหยุดและ hopper ที่ต่อกันยาวจะทำงานทุก tick รายงานของ spark จะบอกว่าอันไหนกินทรัพยากรมากที่สุด
การตั้งค่าของ Paper มีตัวเลือกให้รวมไอเทม จำกัด entity และปรับ hopper เปลี่ยนการตั้งค่าทีละอย่างแล้ววัดใหม่ เพื่อให้รู้ว่าอะไรช่วยได้
5. ตรวจปลั๊กอินและม็อด
ถ้ารายงานของ spark ชี้ไปที่ปลั๊กอินตัวไหน ให้อัปเดตตัวนั้นก่อน ปัญหาแลคจำนวนมากถูกแก้ในเวอร์ชันใหม่ ลบปลั๊กอินที่ไม่ได้ใช้ และเปลี่ยนตัวที่ทำงานหนักทุก tick
6. ตรวจหน่วยความจำและฮาร์ดแวร์
- หน่วยความจำ เมื่อหน่วยความจำใกล้เต็ม เซิร์ฟเวอร์จะใช้เวลาไปกับ garbage collection และรายงานของ spark จะแสดงช่วงที่หยุด เพิ่มให้อีกเล็กน้อย หรือหาว่าอะไรทำให้เต็ม ดู เซิร์ฟเวอร์ Minecraft ต้องใช้ RAM เท่าไร
- CPU ลูปหลักของเกมรันบนเธรดเดียว คอร์เร็วหนึ่งคอร์จึงสำคัญกว่าคอร์ช้าหลายคอร์ โฮสต์แบบแชร์ที่โหลดเกินจะทำให้แลคแบบที่ไม่มีการตั้งค่าไหนแก้ได้
- สตอเรจ การโหลดและบันทึก chunk เร็วบน NVMe และช้าบนฮาร์ดดิสก์ที่งานหนัก
เช็กลิสต์สั้นๆ
- ใช้ Paper หรือ Purpur แทนเซิร์ฟเวอร์ vanilla
- สร้างโลกล่วงหน้าและตั้งขอบโลก
- ตั้ง simulation-distance ให้พอดี
- ทำ profiling ด้วย spark ก่อนและหลังการเปลี่ยนแปลงทุกครั้ง
- ใช้โฮสต์ที่มี CPU แบบ single-thread เร็วและสตอเรจ NVMe
ผู้เล่นที่ถูกตัดการเชื่อมต่อด้วย timeout ขณะที่เซิร์ฟเวอร์แล็ก ควรอ่าน คู่มือข้อผิดพลาดการเชื่อมต่อนี้
โฮสต์เซิร์ฟเวอร์ Minecraft ของคุณในสิงคโปร์
ปิงต่ำสำหรับผู้เล่นในอินเดีย มาเลเซีย และอินโดนีเซีย บนคอร์ AMD EPYC ที่เร็ว พร้อม NVMe และการป้องกัน DDoS
