วิธีลด FiveM Server Lag ให้ Server ลื่นขึ้น
วิธีลด FiveM Server Lag ที่ได้ผลจริงต้องเริ่มจากหาว่า Server ช้าที่ CPU, Script, Database, Network, RAM, Entity หรือ Client ก่อน แล้วค่อยแก้ Bottleneck ตัวนั้น ไม่ใช่เพิ่ม RAM ล้าง Cache หรือ Restart Server แบบสุ่ม
ถ้า FiveM Server มีอาการ
ใช้ Item แล้วหน่วง
Inventory เปิดช้า
Garage โหลดช้า
รถ Spawn ช้า
ผู้เล่นวาร์ปหรือกระตุก
Voice ขาด
Console ขึ้น Hitch Warning
CPU สูง
RAM เพิ่มไม่หยุด
ผู้เล่นเพิ่มแล้ว Server เริ่มช้า
ควรใช้หลัก
วัดปัญหา
↓
หา Bottleneck
↓
หา Resource ต้นเหตุ
↓
แก้ Code / SQL / Network / Entity
↓
Load Test
↓
วัดผลอีกครั้ง
Cfx.re ระบุว่า Hitch Warning สามารถเกิดจาก Resource ที่ทำงานไม่มีประสิทธิภาพ รวมถึง SQL Query ที่ใช้เวลานานและ Loop ที่ทำให้ Script Execution ติดขัด และแนะนำให้ใช้ Profiler ตรวจหาต้นเหตุโดยตรง
บทความนี้จาก comsiam จะไล่แก้ FiveM Server Lag แบบเป็นขั้นตอน เพื่อให้สามารถแยกได้ว่า Lag มาจากอะไรและควรแก้ตรงไหนก่อน
① ก่อนแก้ ต้องรู้ก่อนว่า FiveM Lag แบบไหน
FiveM Lag ไม่ได้มีสาเหตุเดียว
แบ่งคร่าว ๆ ได้เป็น
Server Lag
Server ประมวลผลช้า
Client Lag
FPS เครื่องผู้เล่นต่ำ
Network Lag
Ping หรือ Packet Loss สูง
Database Lag
SQL Query ช้า
Streaming Lag
รถ Map MLO หรือ Texture โหลดหนัก
ถ้าวิเคราะห์ผิดประเภท ต่อให้ Optimize หลายชั่วโมงก็อาจไม่ช่วย
② Server Lag มีอาการอย่างไร?
อาการที่พบบ่อย เช่น
Inventory ตอบสนองช้า
เงินเข้าช้า
ซื้อของแล้วต้องรอ
Garage เปิดช้า
Job Event หน่วง
รถ Spawn ช้า
ผู้เล่นหลายคนรู้สึกหน่วงพร้อมกัน
Console มี Hitch Warning
ถ้าผู้เล่นเกือบทุกคนเป็นพร้อมกัน ให้ตรวจ Server-side ก่อน
③ FPS ต่ำไม่เท่ากับ Server Lag
ถ้าผู้เล่นคนหนึ่งมี
FPS 25
Ping 25 ms
แต่คนอื่นเล่นปกติ
ปัญหาอาจมาจาก
PC
GPU
Map
Vehicle
Client Resource
NUI
ไม่ใช่ FXServer
④ Ping สูงไม่เท่ากับ Script Lag
Ping เกี่ยวข้องกับ Network Round-trip Time
เส้นทางคือ
Player
↓
ISP
↓
Internet
↓
Datacenter
↓
FiveM Server
Script Optimization ไม่สามารถลดระยะทางทางภูมิศาสตร์ได้
⑤ Packet Loss ต้องแยกจาก Ping
ผู้เล่นอาจมี Ping เพียง 30 ms แต่ Packet Loss สูง
อาการอาจเป็น
รถวาร์ป
เสียงขาด
ผู้เล่นกระตุก
Action ไม่ Sync
Entity แปลก
บน Client สามารถใช้ Performance Display เพื่อตรวจทั้ง Ping และ Packet Loss เพิ่มเติมได้
⑥ อย่าเริ่มจาก Restart Server
Restart สามารถทำให้ Server กลับมาลื่นชั่วคราว เพราะ
RAM ถูก Reset
Entity ถูกล้าง
Cache บางส่วนหาย
Resource State เริ่มใหม่
แต่ถ้า Root Cause ยังอยู่ ปัญหาจะกลับมาอีก
⑦ Restart แล้วลื่นขึ้นมากบอกอะไรได้?
เป็นเบาะแสว่าควรตรวจ
Memory Leak
Entity Leak
Cache สะสม
Resource State
Connection Leak
โดยเฉพาะถ้า Server ค่อย ๆ ช้าลงหลังเปิดหลายชั่วโมง
⑧ เก็บ Baseline ก่อนแก้
บันทึกอย่างน้อย
Players:
CPU:
RAM:
Server Tick:
Entity Count:
Database Latency:
Network:
ตัวอย่าง
Players: 120
CPU: 65%
RAM: 9.2 GB
Hitch: มี
Entities: 7,800
หลังแก้จึงเปรียบเทียบได้จริง
⑨ ตรวจ Console เป็นอันดับแรก
มองหา
Hitch Warning
Script Error
SQL Warning
Resource Restart
Timeout
Repeated Error
Error ที่เกิดหลายร้อยครั้งต่อนาทีสามารถสร้าง Load ได้เอง
⑩ Hitch Warning คือสัญญาณสำคัญ
Cfx.re อธิบายว่า Hitch Warning หมายถึง Resource บางตัวทำงานใช้เวลานานผิดปกติ
ตัวอย่างสาเหตุคือ
Slow SQL
Unoptimized Loop
Script Execution ที่ใช้เวลานาน
จึงไม่ควรมองข้าม Hitch Warning ที่เกิดซ้ำ ๆ
⑪ ใช้ Profiler หา Resource ตัวปัญหา
แทนที่จะเดาว่า
“น่าจะ Inventory”
หรือ
“น่าจะ Framework”
ให้ใช้ FiveM Profiler
Profiler สามารถใช้ได้ทั้ง Server และ Client เพื่อดูว่า Resource หรือ Thread ใดทำงานช้า
⑫ เริ่ม Profiler อย่างไร?
จาก Server Console ใช้
profiler record 500
จากนั้นรอให้ Capture เสร็จ
สามารถตรวจสถานะด้วย
profiler status
แล้วนำ Profile ไปวิเคราะห์
⑬ Profiler ช่วยหาได้ลึกแค่ไหน?
สามารถช่วยระบุ
Resource
↓
Thread
↓
File
↓
Code ที่ใช้เวลามาก
เอกสาร Profiler แสดงตัวอย่างการเจาะจาก CPU Spike ไปถึง Resource Tick และบรรทัด Code ที่มีปัญหาได้
⑭ CPU สูงต้องดู Spike ไม่ใช่ค่าเฉลี่ยอย่างเดียว
สมมติ CPU เฉลี่ย
35%
ดูเหมือนปกติ
แต่ทุก 5 วินาที Resource หนึ่งใช้เวลานานมาก
ผู้เล่นอาจรู้สึก
ลื่น
ลื่น
กระตุก
ลื่น
ลื่น
กระตุก
Profiler จะช่วยเห็น Spike แบบนี้
⑮ FiveM Enhanced ใช้ Profiler ใหม่
Enhanced เปลี่ยน Profiler Backend ไปใช้ Perfetto
Command หลักยังคงแนวคิดเดิม เช่น
profiler record <duration>
profiler save <filename>.json
แล้วเปิด Trace เพื่อวิเคราะห์ Timeline ได้ละเอียดขึ้น
⑯ อย่า Optimize ทุก Resource พร้อมกัน
สมมติ Server มี Resource A–Z
Profiler ชี้ว่า Resource H มี Spike สูง
เริ่มจาก H ก่อน
ไม่จำเป็นต้อง Rewrite Framework ทั้งชุด
⑰ Loop เป็นสาเหตุ Lag ที่พบบ่อยมาก
ตัวอย่าง
while true do
Wait(0)
-- งานหนัก
end
โค้ดภายในจะทำงานถี่มาก
ถ้าข้างในมี
Player Loop
Entity Scan
Distance Calculation
Database
Event
จะยิ่งหนัก
⑱ Wait(0) ไม่ได้ผิดเสมอ
บางสิ่งจำเป็นต้องทำทุก Frame เช่น
Input
Draw
Context Interaction บางประเภท
ปัญหาคือใช้ Wait(0) กับงานที่ไม่ต้องทำทุก Frame
⑲ เปลี่ยน Polling ให้ช้าลงเมื่อทำได้
จาก
while true do
Wait(0)
CheckSomething()
end
อาจเปลี่ยนเป็น
while true do
Wait(500)
CheckSomething()
end
ถ้า Feature ไม่ต้องตอบสนองระดับ Frame
ลดจำนวน Execution ลงมหาศาล
⑳ ใช้ Adaptive Sleep
ตัวอย่าง
Player อยู่ไกลร้าน
→ Wait 1000
Player เข้าใกล้
→ Wait 250
Player อยู่จุด Interaction
→ Wait 0
ทำให้ Resource Responsive เฉพาะเวลาจำเป็น
㉑ อย่า Loop Player ทั้ง Server ทุก Tick
ตัวอย่าง
for _, player in ipairs(GetPlayers()) do
-- ทำบางอย่าง
end
ถ้าทำทุก 5 วินาทีอาจไม่มีปัญหา
แต่ถ้าทำทุก Tick กับผู้เล่น 500 คน Cost จะสูงขึ้นมาก
㉒ ระวัง O(n²)
สมมติ Script ทำ
Player ทุกคน
×
Player ทุกคน
จำนวน Comparison จะเพิ่มเร็วมาก
| Players | Comparisons โดยประมาณ |
|---|---|
| 50 | 2,500 |
| 100 | 10,000 |
| 500 | 250,000 |
| 1,000 | 1,000,000 |
ถ้าทำซ้ำถี่ Server สามารถ Lag ได้รุนแรง
㉓ ใช้ Event แทน Polling เมื่อเหมาะสม
แทน
ทุก 1 วินาที
→ เช็คว่าผู้เล่นเปลี่ยน Job หรือยัง
ใช้
Job เปลี่ยน
→ Trigger Event
→ Update
ลดงานที่เกิดขึ้นทั้งที่ไม่มีข้อมูลเปลี่ยน
㉔ Database เป็นตัวการใหญ่ของ Server Lag
SQL Query ที่ช้าสามารถสร้าง Hitch ได้โดยตรงตามตัวอย่างในเอกสาร Cfx.re
ตรวจ Resource ที่เกี่ยวกับ
Inventory
Garage
Phone
Housing
Banking
Characters
เป็นพิเศษ
㉕ หลีกเลี่ยง Query ใน Loop
ตัวอย่างที่อันตราย
Player 200 คน
×
5 Queries
=
1,000 Queries
ต่อหนึ่งรอบ
ถ้าทำทุกไม่กี่วินาที Database จะถูกกดหนักมาก
㉖ Query ข้อมูลเท่าที่ต้องใช้
แทน
SELECT * FROM users
หากต้องการเพียงบาง Field ใช้แนวคิด
SELECT identifier, money, job
FROM users
ลดข้อมูลที่ Database ต้องส่งและ Application ต้องจัดการ
㉗ ทำ Index ให้ Query สำคัญ
Column ที่มักใช้ค้นหา เช่น
identifier
citizenid
plate
owner
ควรตรวจ Execution Pattern และ Index
โดยเฉพาะ Table ที่มีข้อมูลจำนวนมาก
㉘ Index เยอะที่สุดไม่ได้ดีที่สุด
Index ช่วย Read แต่มี Cost ตอน
INSERT
UPDATE
DELETE
จึงต้องสร้างตาม Query จริง
ไม่ใช่สร้าง Index ทุก Column
㉙ Query ซ้ำควรพิจารณา Cache
ข้อมูล Static เช่น
Item Definitions
Job Config
Vehicle Config
ไม่จำเป็นต้องอ่าน Database ใหม่ทุก Interaction
Cache สามารถลด Query จำนวนมากได้
㉚ แต่ Cache ต้องมี Lifecycle
ทุก Cache ควรตอบได้ว่า
สร้างเมื่อไร
Update เมื่อไร
Expire เมื่อไร
ลบเมื่อไร
ไม่อย่างนั้น Cache อาจกลายเป็น Memory Leak
㉛ RAM เพิ่มขึ้นเรื่อย ๆ ต้องสงสัย Memory Leak
ตัวอย่าง
หลัง Restart → 3 GB
6 ชั่วโมง → 5 GB
12 ชั่วโมง → 8 GB
24 ชั่วโมง → 13 GB
ถ้า Workload ใกล้เคียงกัน นี่เป็น Pattern ที่ควรตรวจ
㉜ Player Cache ต้อง Cleanup
Resource อาจเก็บ
Players[source] = data
เมื่อ Player ออกต้องล้าง Entry ที่ไม่ใช้แล้ว
ไม่เช่นนั้น Server เปิดนานเท่าไร Memory ก็อาจสะสม
㉝ JavaScript Resource ก็ Leak ได้
ตัวอย่าง
const players = new Map();
ถ้าไม่
players.delete(id);
ตอน Player ออก ก็สามารถสะสมข้อมูลเช่นกัน
㉞ Entity Leak เป็นปัญหาร้ายแรง
Resource สร้าง
Vehicle
Ped
Object
แล้วไม่ Delete
จำนวน Entity จะค่อย ๆ เพิ่ม
เช่น
เริ่ม Server → 2,000
6 ชั่วโมง → 5,000
12 ชั่วโมง → 12,000
ควรตรวจทันที
㉟ ทุก Entity ต้องมี Cleanup Plan
ถามว่า
ใครสร้าง?
ใช้ทำอะไร?
หมดอายุเมื่อไร?
ใครลบ?
Player Disconnect แล้วลบไหม?
Resource Stop แล้วลบไหม?
ถ้าตอบไม่ได้ Resource มีความเสี่ยง
㊱ Mission Vehicle ควร Cleanup
เช่นรถ Job
เมื่อ
Mission จบ
Player ออก
Resource Restart
ควรมี Logic จัดการ Entity ตามที่ Gameplay ต้องการ
อย่าปล่อยรถสร้างสะสมทุกครั้งที่รับงาน
㊲ Props ก็ทำ Server หนักได้
Object เล็ก ๆ หลายพันตัวก็เป็น Entity
เช่น
Boxes
Cones
Chairs
Job Props
Resource ต้อง Cleanup เช่นเดียวกับรถ
㊳ Network Event Spam ต้องหยุด
ตัวอย่าง Client ทำ
while true do
Wait(0)
TriggerServerEvent('updateData', data)
end
ผู้เล่น 100 คนสามารถสร้าง Event จำนวนมหาศาล
ควรส่งเฉพาะเมื่อ Data เปลี่ยนและ Serverจำเป็นต้องรู้
㊴ Broadcast Event ให้ทุกคนเท่าที่จำเป็น
แทนส่ง
Server
→ Players ทุกคน
ทุกครั้ง
ให้พิจารณาว่า
เฉพาะ Player หนึ่งคน?
Job เดียวกัน?
Player ใกล้เคียง?
Routing Bucket เดียวกัน?
ต้องได้รับข้อมูลหรือไม่
㊵ Payload ใหญ่เกินไปก็ทำให้ Lag
อย่าส่ง Table ขนาดใหญ่มากซ้ำ ๆ หาก Client ต้องการข้อมูลเพียงบางส่วน
ตัวอย่าง Inventory 500 รายการไม่ควรถูกส่งใหม่ทั้งหมดทุกครั้งที่ Item จำนวนหนึ่งเปลี่ยน ถ้าระบบสามารถออกแบบ Delta Update ได้
㊶ State Bags ช่วยลด Event Spam ได้ในบางกรณี
เหมาะกับ State เช่น
Vehicle Lock
Duty
Entity Status
Door
แต่ต้องใช้ตาม Replication Intent
ไม่ใช่ย้าย Event Spam ไปเป็น State Bag Spamแทน
㊷ อย่า Set State Bags ทุก Frame
เช่น
fuel = 70.001
fuel = 70.002
fuel = 70.003
ไม่จำเป็นต้องส่งทุก Frame
ใช้ Threshold หรือ Interval ที่เหมาะสม
㊸ OneSync Scope สำคัญ
อย่าบังคับให้ Client ทุกคนรู้ Entity ทั้ง Server ถ้าไม่จำเป็น
OneSync ถูกออกแบบให้ใช้ Culling ลดข้อมูลที่ Client ต้องรับ
Resource ควรทำงานสอดคล้องกับ Scope Architecture
㊹ อย่าเพิ่ม Culling Distance แบบสุ่ม
การเพิ่ม Scope เพื่อแก้ Script ที่เขียนผิดอาจทำให้
Entity มากขึ้น
Network มากขึ้น
Client CPU สูงขึ้น
แก้ Resource ให้ใช้ Server-side Data เมื่อเป็น Global Logic จะดีกว่า
㊺ Scoreboard Global ควรใช้ Server Data
อย่า Loop Local Player Entities เพื่อสร้างรายชื่อผู้เล่นทั้งหมด
ให้
Server Player List
↓
ข้อมูลที่จำเป็น
↓
Client Scoreboard
เหมาะกับ OneSync มากกว่า
㊻ Police GPS ก็เช่นกัน
ตำรวจอยู่คนละเมืองอาจไม่ได้มี Local Player Entity อยู่ใน Scope
ให้ Server Sync Position Data ที่จำเป็นสำหรับ Authorized Players
ไม่ต้อง Force Entity Visibility
㊼ Client FPS ต่ำให้เปิด Resmon
Cfx.re ระบุว่า Resource Monitor ใช้ตรวจ CPU Time และ Memory Usage ของ Resource ฝั่ง Client และเปิดด้วย
resmon true
เหมาะสำหรับหา Client Resource ที่ทำงานหนัก
㊽ Resmon สูงต้องดูตอน Feature ทำงานจริง
ตัวอย่าง Phone
อย่าดู Resmon ตอน Phone ปิดเพียงอย่างเดียว
ลอง
เปิด Phone
Scroll
เปิด Gallery
โทร
ส่งข้อความ
แล้วดู Resource Usage
㊾ HUD เป็นตัวทำ FPS ตกได้
HUD อาจ Update
Health
Armor
Money
Job
Speed
Voice
ทุก Frameโดยไม่จำเป็น
ข้อมูลที่ไม่ได้เปลี่ยนไม่ควรถูกส่งเข้า NUI ซ้ำ ๆ
㊿ NUI สามารถทำเครื่องผู้เล่นหนักมาก
โดยเฉพาะ UI ที่มี
Animation มาก
DOM จำนวนมาก
JavaScript Loop
Image ใหญ่
Memory Leak
Server ลื่นแต่ Client FPS ต่ำอาจเป็น NUI Problem
51. รถ High-poly ทำให้กระตุก
รถ Custom ที่หนักสามารถเพิ่ม
GPU Load
VRAM
Streaming
Client Memory
โดยเฉพาะเมื่อมีรถหลายคันอยู่ในจุดเดียวกัน
นี่เป็น Client/Asset Optimization ไม่ใช่ Server Script อย่างเดียว
52. Texture 4K จำนวนมากต้องระวัง
การมี YTD ขนาดใหญ่มากในรถจำนวนหลายร้อยคันสามารถทำให้
VRAM เต็ม
Texture Loss
Stutter
Crash
ลด Texture ตามคุณภาพที่จำเป็นจริง
53. MLO หนักทำให้ FPS ดรอปเฉพาะพื้นที่ได้
ถ้าผู้เล่นรายงาน
“เข้าโรงพยาบาลแล้ว FPS จาก 100 เหลือ 35”
ให้ตรวจ
MLO
Polygon
Texture
Collision
LOD
Scripts ในพื้นที่
ไม่ใช่ Restart Server
54. LOD สำคัญกับ Map และรถ
Asset ที่ไม่มี LOD ที่เหมาะสมอาจ Render Model Detail สูงจากระยะไกลเกินไป
เมื่อมี Asset จำนวนมาก Performance จะลดอย่างชัดเจน
55. Asset Conversion ไม่ใช่ Asset Optimization
ถ้าใช้ FiveM Enhanced และ Alchemist Convert Asset สำเร็จ
ไม่ได้หมายความว่า Asset เบาลง
Legacy High-poly
↓
Conversion
↓
Enhanced High-poly
ยังต้อง Optimize Geometry/Texture แยก
56. Resource เยอะไม่ได้แปลว่า Lag
Server มี 300 Resources อาจลื่นได้ถ้า Resource ทำงานดี
Serverมี 50 Resourcesก็อาจ Lag ถ้ามี Script หนึ่งตัวทำ Heavy Loop
ดู Performance ไม่ใช่จำนวน Folder
57. Resource ที่ไม่ได้ใช้ควรปิด
ตรวจ server.cfg
ลบหรือ Disable
Test Script
Duplicate Script
Old Jobs
Unused Maps
Abandoned Systems
ลดทั้ง Load และ Complexity
58. Script ซ้ำหน้าที่กันต้องตรวจ
ตัวอย่าง
Traffic Script A
Density Script B
NPC Controller C
ทั้งหมดอาจแก้ NPC Density ทุก Frame
ผลคือทั้ง Conflict และเสีย CPU
เลือก System ที่จำเป็นจริง
59. Error Spam กิน Performance ได้
Resource ที่ Print Error หลายครั้งต่อ Frame สามารถสร้าง
Console I/O
Log ใหญ่
CPU/Disk Work
แก้ Root Error แทนปล่อยให้ Console วิ่งแดงตลอดเวลา
60. Debug Print ควรปิดใน Production
เช่น
print(json.encode(bigData))
ทุก Tick
ไม่ควรอยู่ Production
ใช้ Debug Mode ที่เปิดเมื่อ Developer ต้องการ
61. Server Artifact เก่าควรอัปเดต
Cfx.re ระบุว่า Server Artifact ที่เข้าสู่ EOS/EOL จะไม่ได้รับระดับการสนับสนุนและความเสถียรเช่น Build ปัจจุบัน ดังนั้น Server Owner ควรรักษา Artifact ให้อยู่ในรุ่นที่รองรับ
แต่ควร Update ผ่าน Staging ก่อน Production
62. อย่า Update Production โดยไม่มี Backup
ใช้
Backup
↓
Staging
↓
Update
↓
Test
↓
Production
โดยเฉพาะ
Framework
Inventory
Database Resource
Server Artifact
63. txAdmin ช่วยตรวจ Server ได้
txAdmin มี Monitoring สำหรับ
CPU/RAM
Server Threads
Player Count
Live Console
จึงช่วยดู Pattern ของ Server Operation ได้ แม้ไม่ได้ Optimize Script ให้อัตโนมัติ
64. CPU สูงตอน Player เพิ่มต้องตรวจ Scaling
สมมติ
50 Players → CPU 25%
100 Players → CPU 40%
150 Players → CPU 80%
แสดงว่า Workload อาจ Scale ไม่ดีช่วงหนึ่ง
ใช้ Profiler ตอนมี Player Count สูง
ไม่ใช่ Profile ตอน Server ว่าง
65. ต้อง Profile ตอนเกิดปัญหา
Profiler ตอน 5 Players อาจไม่เจอ Resource ที่พังตอน 150 Players
Capture ตอน
Peak Hour
Event
Player Count สูง
Hitch เกิด
จะมีประโยชน์มากกว่า
66. Database ก็ต้องทดสอบตอน Peak
Slow Query อาจไม่ช้าตอน Table เล็กหรือ User น้อย
ปัญหาอาจเกิดเมื่อ
Concurrent Queries เพิ่ม
Locks เพิ่ม
Connections เพิ่ม
ดังนั้น Load Test Database ด้วย
67. Voice มีผลต่อความรู้สึก Lag
ถ้าเสียง
Delay
ขาด
Robot
ผู้เล่นอาจเรียกว่า Server Lag ทั้งที่สาเหตุเป็น Network/Voice
ต้องแยก Voice Troubleshooting ออกจาก Script Hitch
68. Datacenter อยู่ไกลแก้ด้วย Script ไม่ได้
ถ้าผู้เล่นหลักอยู่ไทยแต่ Server อยู่ไกลมาก
Ping Baseline อาจสูง
เลือก Region และ Routing ที่เหมาะกับ Community
สำคัญพอ ๆ กับ CPU
69. Packet Loss สำคัญกว่าการมี Bandwidth เยอะอย่างเดียว
Network 10 Gbps ที่ Packet Loss สูงยังให้ประสบการณ์แย่ได้
ดู
Stability
Routing
Packet Loss
DDoS Protection
ร่วมกับ Port Speed
70. Enhanced มี Metrics ช่วยหาปัญหาได้มากขึ้น
Cfx.re ระบุว่า Enhanced มี Prometheus-compatible Metrics มากกว่า 80 รายการ ครอบคลุม เช่น
UDP Packets
Peer Counts
OneSync Entities
State Bags
Routing Buckets
NetID Usage
JavaScript/Lua Memory
Event Loop Queues
Server Thread Tick Times
ทำให้หาความสัมพันธ์ระหว่าง Player Count กับ Server Load ได้ละเอียดขึ้น
71. เก็บ Metrics ระยะยาวดีกว่า Snapshot
ตัวอย่าง
18:00 → 80 Players → ปกติ
20:00 → 140 Players → Entity เพิ่ม
21:00 → 170 Players → svSync Tick สูง
22:00 → Hitch เริ่ม
ข้อมูลแบบนี้ช่วยหา Capacity Limit ได้จริง
72. ทำ Performance Budget ให้ Resource
กำหนดกฎ Development เช่น
ห้าม Query ทุก Frame
ห้าม Entity Scan ทั้งโลกโดยไม่มีเหตุผล
ต้อง Cleanup Entity
NUI Update เมื่อ Data เปลี่ยน
Resource สำคัญต้อง Profile ก่อน Merge
ช่วยป้องกัน Lag ก่อนขึ้น Production
73. Resource ใหม่ต้องผ่าน Staging
Workflow ที่ดีคือ
Development
↓
Staging
↓
Profiler
↓
Resmon
↓
Functional Test
↓
Load Test
↓
Production
อย่าติดตั้ง Resource ใหม่ลง Server ผู้เล่นจริงทันที
74. วิธีลด FiveM Server Lag แบบเร่งด่วน
หาก Server กำลัง Lag ให้ทำตามลำดับนี้
ดู Player Count
ดู CPU/RAM
อ่าน Console
หา Hitch Warning
Capture Profiler
ดู Resource ที่ Spike
ตรวจ SQL ของ Resource นั้น
ตรวจ Loop/Event
ตรวจ Entity Count
Disable Resource ต้องสงสัยบน Test Server
Reproduce
แก้และวัดซ้ำ
อย่าเริ่มจากลบ Cache
75. ถ้าปิด Resource แล้ว Lag หายทำอย่างไรต่อ?
อย่าจบด้วยการลบ Resourceทันทีถ้ายังต้องใช้
เปิด Source แล้วหา
Heavy Loop
Slow Query
Event Spam
Entity Leak
Memory Leak
จากนั้นแก้ Root Cause
76. ถ้ามี Resource ต้องสงสัยหลายตัว
ใช้ Binary Isolation
สมมติมี 20 Resources ในกลุ่ม Custom
ปิด 10
Test
เลือกครึ่งที่มีปัญหา
แบ่งอีกครึ่ง
ทำซ้ำ
ช่วยจำกัด Resource ต้นเหตุได้เร็ว
77. อย่าปิด Core Resource บน Production แบบสุ่ม
Resource เช่น
Framework
Inventory
Database
Character
ถ้าปิดอาจทำให้ Data เสียหรือ Gameplay พัง
ทำ Diagnostic บน Staging/Test Server เมื่อเป็นไปได้
78. Hardware Upgrade ควรทำเมื่อไร?
เมื่อวัดแล้วพบว่า
Code/Database/Entities ถูก Optimize แล้ว แต่ Hardware ยังตันจริง
เช่น Main CPU Thread มี Load สูงจาก Workload ที่จำเป็น
จึงค่อยพิจารณา CPU ที่แรงกว่า
79. เพิ่ม RAM ควรทำเมื่อไร?
เมื่อ Server มี Memory Requirement จริงและ RAM ใกล้เต็ม
ไม่ใช่เพราะ CPU 100%
CPU Bottleneck กับ RAM Bottleneck เป็นคนละเรื่อง
80. NVMe ช่วยเรื่องอะไร?
ช่วยกับ
File I/O
Startup
Database I/O
Cache
แต่ Heavy Lua Loop ไม่ได้เร็วขึ้นมากเพียงเพราะเปลี่ยน SATA SSD เป็น NVMe
81. FiveM Server Lag Checklist
CPU
Profiler แล้ว
ไม่มี Heavy Loop
ไม่มี Resource Spike ต่อเนื่อง
RAM
Memory Stable
Player Cache Cleanup
ไม่มี Entity Leak
Database
ไม่มี Slow Query สำคัญ
Index เหมาะสม
ไม่มี Query Spam
Network
Ping ปกติ
Packet Loss ต่ำ
ไม่มี Event Spam
Entities
Vehicle Cleanup
Ped Cleanup
Object Cleanup
Client
Resmon ปกติ
NUI ไม่หนัก
Assets Optimize
Operations
Artifact รองรับ
Monitoring
Staging
Backup
82. สิ่งที่ไม่ควรทำเมื่อ Server Lag
หลีกเลี่ยง
ล้าง Cache ทุกครั้ง
Restart ทุกชั่วโมงเพื่อกลบปัญหา
ซื้อ RAM โดยไม่ตรวจ
เพิ่ม CPU โดยไม่ Profile
ลบ Resource แบบเดา
ใส่
Wait(0)ทุก LoopQuery SQL ใน Loop
TriggerServerEvent ทุก Frame
Broadcast Data ใหญ่ทุกคน
Spawn Entity โดยไม่ Cleanup
Update Production โดยไม่ Test
วิธีเหล่านี้มักแก้อาการมากกว่าต้นเหตุ
83. คำถามที่พบบ่อย
FiveM Server Lag แก้อย่างไร?
เริ่มจาก Console/Hitch Warning แล้วใช้ Profiler หา Resource ที่ใช้เวลามาก จากนั้นตรวจ Code, SQL, Events และ Entities
FiveM Hitch Warning คืออะไร?
เป็นสัญญาณว่า Resource หรือ Thread ใช้เวลาทำงานนานผิดปกติ
SQL ทำให้ FiveM Lag ได้ไหม?
ได้ และ Cfx.re ยก Slow SQL Query เป็นตัวอย่างหนึ่งของสาเหตุ Hitch
Resource เยอะทำให้ Server Lag ไหม?
ไม่จำเป็น Resource หนึ่งตัวที่เขียนไม่ดีก็สามารถหนักกว่า Resource จำนวนมากที่ Optimize ดี
RAM สูงแก้อย่างไร?
ตรวจ Memory Leak, Player Cache และ Entity Leak ก่อนเพิ่ม RAM
CPU สูงแก้อย่างไร?
ใช้ Profiler เพื่อหาว่า Resource/Thread ใดเป็นต้นเหตุ
FPS ต่ำใช้ Profiler หรือ Resmon?
เริ่มจาก Resmon สำหรับ Client Resources และใช้ Client Profilerเมื่อต้องเจาะลึก
Resmon เปิดอย่างไร?
resmon true
Restart ช่วยไหม?
ช่วยชั่วคราวในบางกรณี แต่ไม่ใช่การแก้ Root Cause
ล้าง Cache ช่วย Server Lag ไหม?
ไม่ใช่วิธีมาตรฐานสำหรับแก้ Script, SQL, CPU หรือ Entity Bottleneck
84. สรุปวิธีลด FiveM Server Lag ให้ Server ลื่นขึ้น
หลักสำคัญที่สุดคือ
FiveM Server Lag ต้องแก้ตาม Bottleneck จริง
ถ้า Console มี Hitch Warning ให้เริ่มจาก Profiler
ถ้า Resource ฝั่ง Client กินเครื่อง ให้ใช้ Resmon
ถ้า Inventory, Garage หรือ Character ตอบสนองช้า ให้ตรวจ Database
ถ้า RAM เพิ่มขึ้นทุกชั่วโมง ให้ตรวจ Memory Leak และ Entity Leak
ถ้าผู้เล่นกระตุกแต่ Server Tick ปกติ ให้ตรวจ Network และ Packet Loss
ถ้า FPS ต่ำเฉพาะพื้นที่ ให้ตรวจ Map, MLO, Vehicles และ Textures
และถ้า Server Lag เฉพาะเวลาผู้เล่นเยอะ ให้ตรวจ Resource ที่ Scale ตาม
Players + Entities + Events + Database
สำหรับ Enhanced มีเครื่องมือวิเคราะห์ละเอียดขึ้นอีก เพราะ Cfx.re เพิ่ม Perfetto Profiler และ Prometheus-compatible Metrics มากกว่า 80 รายการ ทำให้สามารถตรวจ OneSync Entities, State Bags, NetIDs, Memory, Network และ Thread Tick Times ได้จากข้อมูลจริง
แนวทางที่ comsiam แนะนำคือ
Console
↓
Profiler
↓
Resmon
↓
Database
↓
Events
↓
Entities
↓
Network
↓
Assets
↓
Load Test
↓
Measure Again
จำสั้น ๆ:
Hitch → Profiler
FPS ต่ำ → Resmon
SQL ช้า → Query + Index
CPU สูง → Resource/Loop
RAM เพิ่มไม่หยุด → Memory Leak
Entity เพิ่มไม่หยุด → Entity Leak
Ping/Packet Loss → Network
FPS ตกเฉพาะ Map → Asset Optimization
ผู้เล่นเพิ่มแล้ว Lag → Scaling Problem
FiveM Server ที่ลื่นจึงไม่ใช่ Server ที่ Restart บ่อยที่สุดหรือซื้อ Hardware แพงที่สุด แต่คือ Server ที่รู้ว่า Bottleneck อยู่ตรงไหน แก้ที่ Root Cause และทดสอบ Performance ก่อนนำ Resource ทุกตัวขึ้น Production
Comments
Post a Comment