FiveM “server thread hitch warning”: หมายถึงอะไรและแก้อย่างไร
คำเตือนอย่าง “server thread hitch warning: timer interval of 250 milliseconds” หมายความว่าลูปหลักของเซิร์ฟเวอร์ค้างไปนานเท่านั้น ผู้เล่นจะรู้สึกเป็นอาการ rubber-banding การกระทำที่ดีเลย์ และ desync นี่คือวิธีหาสาเหตุแทนการเดา
คำเตือนนี้หมายถึงอะไร
FXServer รันตรรกะของเกมส่วนใหญ่ รวมถึงสคริปต์ฝั่งเซิร์ฟเวอร์ทุกตัว บนเธรดหลักเธรดเดียว ลูปแต่ละรอบควรใช้เวลาไม่กี่มิลลิวินาที ถ้ารอบไหนใช้เวลานานกว่ามาก คอนโซลจะแสดงคำเตือน hitch พร้อมระยะเวลาที่ค้าง คำเตือนแบบเดียวกันอาจระบุเธรด network หรือ sync
- มี hitch เล็กน้อยตอนเซิร์ฟเวอร์เพิ่งเริ่ม ถือว่าปกติ: resource กำลังโหลดและฐานข้อมูลกำลังเริ่มทำงาน
- hitch ที่เกิดซ้ำเรื่อยๆ ระหว่างเล่น แปลว่ามีบางอย่างผิดปกติ และผู้เล่นจะรู้สึกได้
1. หา resource ด้วย profiler
FXServer มี profiler ในตัว ให้รันในคอนโซลของเซิร์ฟเวอร์ (Live Console ของ txAdmin) ไม่ใช่คอนโซล F8 ในขณะที่ hitch กำลังเกิด:
profiler record 500 profiler status profiler saveJSON hitch.json
profiler record 500 จะบันทึก 500 เฟรมถัดไป เมื่อ profiler status แสดงว่าบันทึกเสร็จแล้ว ให้บันทึกไฟล์ เปิด developer tools ของ Chrome ไปที่แท็บ Performance แล้วโหลดไฟล์ hitch จะเห็นเป็นยอดแหลมสูง ซูมเข้าไปเพื่อดูว่า resource ไหนใช้เวลา ลงลึกถึงไฟล์และบรรทัด
2. แก้สาเหตุที่พบบ่อยในสคริปต์
- ลูปที่รันทุก tick ลูปฝั่งเซิร์ฟเวอร์ที่ใช้
Wait(0)จะรันถี่ที่สุดเท่าที่ทำได้ ลูปฝั่งเซิร์ฟเวอร์ส่วนใหญ่รอได้หลายร้อยหรือหลายพันมิลลิวินาทีระหว่างแต่ละรอบ - ประมวลผลผู้เล่นหรือ entity ทั้งหมดพร้อมกัน การวนผู้เล่นหรือรถทุกคันทุกวินาทีจะสิ้นเปลืองขึ้นเมื่อเมืองโตขึ้น กระจายงานออกไป หรือตอบสนองตาม event แทนการตรวจตลอดเวลา
- คิวรีฐานข้อมูลที่ช้า คิวรีที่สแกนตารางใหญ่โดยไม่มี index อาจใช้เวลาหลายร้อยมิลลิวินาที oxmysql จะรายงานคิวรีที่ช้าในคอนโซล ให้เพิ่ม index ให้คอลัมน์ที่ถูกค้นหา และอย่ารันคิวรีในลูปที่ถี่
- การสแปม event client ที่เรียก event ฝั่งเซิร์ฟเวอร์หลายครั้งต่อวินาที ไม่ว่าจะพลาดหรือโกง จะทำให้เธรดหลักยุ่งตลอด จำกัดความถี่ของ event ที่หนัก
- resource เก่า ลบสคริปต์ที่ไม่ได้ใช้แล้ว และอัปเดตตัวที่ยังใช้
3. ตรวจเซิร์ฟเวอร์ฐานข้อมูล
เซิร์ฟเวอร์โรลเพลย์เขียนข้อมูลลงฐานข้อมูลตลอดเวลา วาง MariaDB ไว้บนเครื่องเดียวกันหรือใกล้มาก บนสตอเรจ NVMe และมีหน่วยความจำเพียงพอ ล้างตาราง log ที่โตไม่มีที่สิ้นสุด และสำรองฐานข้อมูลสม่ำเสมอ
4. ตรวจโฮสต์
- ความเร็ว CPU เธรดหลักใช้คอร์เดียว ดังนั้นความเร็วแบบ single-thread จะกำหนดว่างานสคริปต์ใส่ได้เท่าไรในแต่ละเฟรม คอร์ของโฮสต์ที่ช้าหรือโหลดเกินจะเปลี่ยนต้นทุนสคริปต์เล็กๆ ให้กลายเป็น hitch
- แอนติไวรัสบนเซิร์ฟเวอร์ Windows การสแกนแบบเรียลไทม์บนโฟลเดอร์เซิร์ฟเวอร์ขนาดใหญ่อาจใช้ CPU มาก บนเซิร์ฟเวอร์ Windows ที่เราดูแล Microsoft Defender เคยใช้ CPU มากกว่า FXServer เสียอีก ยกเว้นโฟลเดอร์เซิร์ฟเวอร์
FXServer.exeและโปรแกรมฐานข้อมูลจากการสแกน และเปิดการป้องกันแบบเรียลไทม์ไว้สำหรับส่วนอื่นทั้งหมด - โปรแกรมอื่นบนเครื่องเดียวกัน บอท เว็บพาเนล และการสำรองข้อมูลที่รันช่วงคนเล่นเยอะ จะแย่ง CPU เดียวกัน
แลคแค่บนจอของผู้เล่นบางคน?
แลคฝั่ง client ต่างจาก hitch ของเซิร์ฟเวอร์ ถ้ากระตุกแค่บางคน ให้พวกเขาเปิดคอนโซล F8 แล้วรัน resmon 1 เพื่อดูว่า resource ไหนใช้เวลามากที่สุดฝั่งพวกเขา
ป้องกันไม่ให้กลับมาอีก
- ทำ profiling หลังเพิ่มสคริปต์ใหญ่ทุกครั้ง ไม่ใช่รอหลายสัปดาห์
- ดูกราฟ CPU ของเซิร์ฟเวอร์ช่วงคนเล่นเยอะ
- ทดสอบอัปเดตบนสำเนาของเซิร์ฟเวอร์ก่อน
ข้อผิดพลาดของสคริปต์ในคอนโซล เช่น “attempt to index a nil value” เป็นปัญหาอีกแบบ ดู วิธีแก้ข้อผิดพลาดนั้นในสคริปต์ ESX และ QBCore
โฮสต์เซิร์ฟเวอร์ FiveM ของคุณในสิงคโปร์
ปิงต่ำสำหรับผู้เล่นในอินเดีย มาเลเซีย และอินโดนีเซีย บน AMD EPYC พร้อม NVMe และการป้องกัน DDoS จาก Gcore บนทุก IP
