FiveM Server CPU สูง แก้อย่างไร หา Script ตัวปัญหาให้เจอ

FiveM Server CPU สูงควรแก้ด้วยการหา Resource หรือ Thread ที่เป็น Bottleneck ก่อน ไม่ใช่รีบเพิ่มสเปกเครื่องทันที เพราะ CPU สูงสามารถเกิดจาก Script เพียงตัวเดียว, Loop ที่ทำงานถี่เกินไป, SQL Query ช้า, Event Spam, Entity จำนวนมาก หรือ Resource ที่ Scale ไม่ดีเมื่อผู้เล่นเพิ่มขึ้น

วิธีที่ถูกต้องคือ

CPU สูง
↓
ตรวจ txAdmin / Server Threads
↓
ดู Hitch Warning
↓
Capture Profiler
↓
หา Resource ที่ Spike
↓
ลงไปถึง Function / Code
↓
ตรวจ SQL / Loop / Event / Entity
↓
แก้ Root Cause
↓
Profile ซ้ำ

FiveM มีเครื่องมือสำคัญอย่าง Profiler สำหรับหา Resource และ Code ที่ทำให้ Server Hitch ขณะที่ txAdmin สามารถดู CPU/RAM และกราฟ Performance ของ Server Threads เทียบกับจำนวนผู้เล่นได้

สำหรับ FiveM Enhanced ยังเพิ่ม Perfetto Profiler และ Metrics จำนวนมาก ทำให้สามารถตรวจ Main Thread, Network, Sync, Lua/JavaScript Memory, OneSync Entities และข้อมูลระบบได้ละเอียดขึ้น

บทความนี้จาก comsiam จะสอนวิธีไล่หา FiveM Script กิน CPU แบบเป็นขั้นตอน ตั้งแต่ระดับ Server จนถึงบรรทัด Code

① CPU สูงแปลว่า FiveM Server มีปัญหาเสมอไหม?

ไม่เสมอ

CPU Usage สูงชั่วคราวสามารถเกิดได้ตอน

  • Server Start

  • Resource Start

  • ผู้เล่นจำนวนมาก Join พร้อมกัน

  • Event ใหญ่

  • Database Loading

  • Asset Processing

สิ่งที่ต้องระวังคือ CPU สูงต่อเนื่องหรือเกิด Spike จน Gameplay มีอาการ

  • Delay

  • Hitch

  • Inventory ช้า

  • Garage หน่วง

  • Player กระตุก

② CPU 100% ต้องดูอะไรเพิ่มเติม?

อย่าดู Total CPU เพียงตัวเดียว

ต้องดู

  • CPU ต่อ Core

  • Server Thread Performance

  • Player Count

  • Resource Activity

  • Hitch Warning

FiveM Workload บางส่วนสามารถติด Bottleneck ที่ Thread สำคัญ แม้ Total CPU ของเครื่องยังไม่เต็มทุก Core

③ CPU รวม 40% แต่ Server ยัง Lag ได้ไหม?

ได้

สมมติเครื่องมีหลาย Core

แต่ Thread สำคัญหนึ่งตัวเต็ม

Core 1 → 100%
Core 2 → 20%
Core 3 → 15%
Core 4 → 25%

Total CPU อาจดูไม่สูงมาก

แต่ Server ยัง Hitch ได้

ดังนั้นต้องดู Thread Performance ไม่ใช่ Task Manager อย่างเดียว

④ ใช้ txAdmin ดู CPU ก่อน

txAdmin มี Monitoring สำหรับ

  • Server CPU

  • RAM

  • Server Threads Performance

  • Player Count

  • Live Console

จึงเป็นจุดเริ่มต้นที่ดี

ลองเปรียบเทียบ

ผู้เล่น 30 คน → CPU 20%
ผู้เล่น 80 คน → CPU 35%
ผู้เล่น 120 คน → CPU 75%

ถ้า CPU เพิ่มผิดปกติเมื่อ Player ถึงระดับหนึ่ง แสดงว่าอาจมี Scaling Problem

⑤ ดูกราฟ Player Count คู่กับ CPU

นี่สำคัญมาก

ถ้า CPU เพิ่มสัมพันธ์กับ Player Count อาจเกิดจาก

  • Player Loop

  • Player Data

  • Inventory

  • Voice

  • Database

  • Entity

  • OneSync

แต่ถ้า CPU Spike แม้ Server ว่าง อาจเป็น Resource Background Task

⑥ Hitch Warning คืออะไร?

Hitch Warning คือสัญญาณว่า Thread หรือ Resource ใช้เวลาประมวลผลนานผิดปกติ

Cfx.re ระบุว่าสาเหตุสามารถเป็น

  • SQL Query ช้า

  • Loop ที่ไม่ Optimize

  • Script Execution ที่ใช้เวลานาน

ถ้า CPU สูงพร้อม Hitch Warning ให้เริ่มจาก Profiler

⑦ อย่า Ignore Hitch Warning ที่เกิดซ้ำ

Hitch หนึ่งครั้งตอน Server Startup อาจไม่สำคัญ

แต่ถ้า Console ขึ้น

server thread hitch warning

ซ้ำ ๆ ระหว่าง Gameplay ต้องตรวจ

โดยเฉพาะเมื่อ Player รู้สึกหน่วงพร้อมกัน

⑧ ใช้ FiveM Profiler

Profiler ถูกสร้างมาเพื่อหา

Resource → Thread → Function → Code

ที่ใช้เวลามาก

สามารถใช้ได้ทั้ง

  • Server-side

  • Client-side

แต่ในกรณี CPU Server สูง ให้ Capture จาก Server Console

⑨ วิธีเริ่ม Profiler

ตัวอย่าง

profiler record 500

จากนั้นตรวจสถานะ

profiler status

เมื่อ Capture เสร็จจึงนำ Profile มาวิเคราะห์

⑩ ควร Profile นานแค่ไหน?

ให้ Capture ครอบคลุมช่วงที่เกิดปัญหา

ถ้า Hitch เกิดทุก 5 วินาที ควร Capture ให้ผ่านเหตุการณ์นั้นหลายครั้ง

ถ้า CPU สูงเฉพาะตอน

  • Player เข้า Garage

  • Inventory Save

  • Payday

ให้ Capture ช่วงนั้น

⑪ อย่า Profile ตอน Server ว่าง

ถ้าปัญหาเกิดตอน 150 Players

การ Profile ตอนมี 5 Players อาจไม่พบอะไร

ควร Capture ตอนใกล้ Peak Load หรือจำลอง Workload เดิมบน Staging

⑫ Enhanced ใช้ Perfetto Profiler

FiveM Enhanced เปลี่ยน Profiler Backend เป็น Perfetto

คำสั่งหลักยังใช้แนวทาง เช่น

profiler record <duration>
profiler save <filename>.json

จากนั้นเปิด Trace เพื่อดู Timeline ได้ละเอียด

⑬ Profiler ต้องดูอะไรเป็นอันดับแรก?

มองหา

  • CPU Time Spike

  • Long Tick

  • Resource ที่กินเวลามาก

  • Function ทำงานซ้ำถี่

  • Script ที่สัมพันธ์กับ Hitch

อย่ามองเพียง Resource ที่มีชื่อใหญ่หรือ Framework หลัก

⑭ Framework ไม่ใช่ต้นเหตุเสมอ

Server ใช้ ESX แล้ว CPU สูงไม่ได้แปลว่า

ESX = ตัวปัญหา

อาจเป็น Third-party Resource เช่น

custom-police
custom-garage
phone
housing
vehicle-system

ที่พึ่ง Framework

ต้อง Profile ก่อนตัดสิน

⑮ Script ตัวเดียวทำ CPU สูงทั้ง Server ได้ไหม?

ได้

โดยเฉพาะ Script ที่มี

while true do
    Wait(0)
    -- งานหนักจำนวนมาก
end

หรือทำ Player/Entity Scan จำนวนมาก

Resource เพียงตัวเดียวสามารถเป็น Bottleneck ของ Server ทั้งระบบได้

⑯ Wait(0) คืออะไร?

หมายถึงให้ Loop กลับมาทำงานเร็วมาก

เหมาะกับบาง Client Logic เช่นการอ่าน Input

แต่ Server-side Logic ส่วนใหญ่ไม่ควรใช้ Wait(0) โดยไม่มีเหตุผลชัดเจน

⑰ ตัวอย่าง Loop ที่ควรตรวจ

CreateThread(function()
    while true do
        Wait(0)

        for _, playerId in ipairs(GetPlayers()) do
            -- process
        end
    end
end)

เมื่อมี Player 200 คน Logic นี้จะ Loop ผ่าน 200 Players ถี่มาก

หากทำ SQL หรือ Calculation เพิ่มข้างในยิ่งหนัก

⑱ เพิ่ม Wait ช่วยได้หรือไม่?

ถ้า Logic ไม่ต้อง Real-time ทุก Tick ช่วยได้มาก

จาก

Wait(0)

เป็น

Wait(500)

ลด Frequency ลงอย่างมหาศาล

แต่ต้องเลือก Interval ตาม Gameplay

⑲ งานประเภทไหนไม่ต้องรันทุก Frame?

เช่น

  • ตรวจ Payday

  • Update Database

  • Cleanup Entities

  • Check AFK

  • Save Player

  • Refresh Cache

งานเหล่านี้มักไม่ต้องทำทุก Frame

⑳ Adaptive Interval ใช้ได้ไหม?

ได้

เช่น

ไม่มี Player ใช้ Feature
→ Check ทุก 5 วินาที

มี Player ใช้
→ Check ทุก 500 ms

ช่วยลด CPU ในช่วง Idle

㉑ Player Loop ต้องระวัง

ทุกครั้งที่เขียน

GetPlayers()

แล้ว Loop ทั้งหมด ให้ถามว่า

จำเป็นต้องทำกับผู้เล่นทุกคนไหม?

บาง Logic สามารถใช้ Event เมื่อ Player State เปลี่ยนแทนได้

㉒ O(n) คืออะไร?

ถ้ามี Player n คน และ Script Loop หนึ่งครั้งต่อ Player

จำนวนงานเพิ่มตาม Player

ตัวอย่าง

50 Players → 50 Operations
500 Players → 500 Operations

ยังอาจ Scale ได้หาก Frequency ต่ำและงานเบา

㉓ O(n²) อันตรายกว่า

ถ้า Player ทุกคนถูกเปรียบเทียบกับ Player ทุกคน

50 → 2,500
100 → 10,000
500 → 250,000
1,000 → 1,000,000

Operations ต่อรอบ

ถ้าทำหลายครั้งต่อวินาที CPU สามารถพุ่งอย่างรวดเร็ว

㉔ Distance Check ทุก Player กับทุก Player ควรระวัง

ตัวอย่างระบบที่อาจใช้ Pattern นี้

  • Nearby Players

  • Police Detection

  • Proximity System

  • Custom Voice Logic

ควรใช้ OneSync Scope, Zones หรือ Server Architecture ที่เหมาะสมแทน Global Comparison เมื่อทำได้

㉕ Entity Scan ก็ทำ CPU สูงได้

Script บางตัว Scan

  • Vehicles

  • Peds

  • Objects

ทั้ง Server ซ้ำ ๆ

เช่น

GetAllVehicles
→ Loop ทุกคัน
→ Check ทุกวินาที

เมื่อ Entity เพิ่มเป็นหลายพันตัว Cost จะสูงขึ้น

㉖ Cleanup Script เองก็ทำ Server หนักได้

Ironically Script ที่ตั้งใจ “Optimize Server” บางตัวกลับ Scan Entity ทั้งโลกถี่เกินไป

ตัวอย่าง

ทุก 100 ms
→ Scan รถทั้งหมด
→ Check ทุกคัน

อาจสร้าง CPU Load มากกว่ารถที่ต้องการลบเสียอีก

㉗ Cleanup ควรทำเป็น Interval

เช่น

ทุก 5 นาที
→ ตรวจรถที่ไม่มีผู้เล่น

หรือใช้ Entity Lifecycle ตั้งแต่ Resource สร้าง Entity

ดีกว่า Scan ทุก Entity ถี่ ๆ โดยไม่มีเหตุผล

㉘ Entity Leak ทำ CPU สูงตามเวลาได้

ถ้า Resource Spawn Object แล้วไม่ Delete

จำนวน Entity อาจเพิ่ม

เปิดใหม่ → 2,000
6 ชั่วโมง → 5,000
12 ชั่วโมง → 10,000

OneSync และ Resource ที่ Iterate Entity จะหนักขึ้นตามไปด้วย

㉙ CPU สูงขึ้นเรื่อย ๆ หลังเปิด Server นาน ให้ตรวจ Entity Count

โดยเฉพาะ

  • Vehicles

  • Job Props

  • NPC

  • Mission Objects

ถ้า Restart แล้ว CPU ลดมาก อาจมี Entity/State สะสม

㉚ Database Query ทำ CPU Server สูงได้หรือไม่?

ได้ทางอ้อมและทำ Hitch ได้โดยตรง

Cfx.re ยก Slow SQL Query เป็นสาเหตุหนึ่งของ Hitch

Resource ที่รอ Query หรือประมวลผล Result ใหญ่มากสามารถทำให้ Server Tick ช้าลง

㉛ หา Slow Query ใน Resource สำคัญ

ตรวจ

  • Character

  • Inventory

  • Garage

  • Phone

  • Housing

  • Banking

  • Logs

โดยเฉพาะ Query ที่ทำบ่อยมาก

㉜ ห้าม Query Database ทุก Tick

ตัวอย่างที่ไม่ควรมี

while true do
    Wait(0)
    MySQL.query(...)
end

นี่เป็นปัญหาร้ายแรง

Database ไม่ควรถูก Poll แบบ Frame-based

㉝ Query ต่อ Player ก็ต้องระวัง

สมมติทุก 10 วินาทีทำ

300 Players
×
5 Queries
=
1,500 Queries

พร้อมกัน

อาจสร้าง Burst Load สูง

ควรพิจารณา

  • Cache

  • Batch

  • Event-driven Update

㉞ SELECT * ใช้ข้อมูลมากเกินจำเป็น

ถ้าต้องการเพียง ID กับ Balance

อย่าดึง Column จำนวนมาก

ตัวอย่าง

SELECT identifier, money
FROM users
WHERE identifier = ?

ช่วยลด Data Processing

㉟ Index ช่วย CPU/Database ได้

Query ที่ Search Column ไม่มี Index บน Table ใหญ่อาจต้อง Scan ข้อมูลจำนวนมาก

ตรวจ Column เช่น

  • identifier

  • citizenid

  • plate

  • owner

ตาม Query จริง

㊱ Cache ช่วยลด CPU และ SQL ได้

ข้อมูลที่ Static เช่น

  • Items

  • Vehicles Definitions

  • Jobs

  • Shops Config

สามารถ Load ครั้งเดียวและ Cache

แทนการ Query ทุก Interaction

㊲ Cache ใหญ่เกินก็มีปัญหา

อย่า Cache ทุกอย่างตลอดอายุ Server

ต้องมี

  • Invalidation

  • Cleanup

  • Expiry

ไม่เช่นนั้น RAM จะสูงและ Garbage Collection อาจมี Workload เพิ่ม

㊳ Lua Table ใหญ่เกินไปต้องระวัง

เช่นเก็บข้อมูล Player เก่าทุกคนโดยไม่ Remove

Players[source] = data

แต่ไม่มี Cleanup ตอน playerDropped

Server เปิดนาน Data จะสะสม

㊴ JavaScript Map/Array ก็เหมือนกัน

ตัวอย่าง

const players = new Map();

ต้อง Delete ตอน Player ออกถ้าข้อมูลไม่จำเป็น

Runtime ใหม่ไม่ได้แก้ Logical Memory Leak ให้อัตโนมัติ

㊵ Error Spam ทำ CPU สูงได้

Resource ที่ Error หลายร้อยครั้งต่อวินาทีสร้างทั้ง

  • Script Work

  • Console Output

  • Log I/O

ตรวจ Console ว่ามี Error ซ้ำหรือไม่

㊶ Debug Print ก็สร้าง Load ได้

หลีกเลี่ยง

print(json.encode(playerData))

ทุก Tick

โดยเฉพาะ Data ใหญ่

Production ควรมี Debug Mode

㊷ Event Spam ต้องตรวจ

เช่น

TriggerServerEvent('updatePosition', coords)

ทุก Frame

จาก Player จำนวนมาก

จะสร้างทั้ง Network และ Server Event Processing

㊸ Event ควรเกิดเมื่อจำเป็น

ตัวอย่าง Position อาจไม่ต้อง Custom Sync หาก Engine/OneSync มีข้อมูลอยู่แล้ว

ถามก่อนสร้าง Network Eventว่า

FiveM Sync สิ่งนี้ให้เราอยู่แล้วหรือไม่?

ลดการทำงานซ้ำกับ Platform

㊹ Payload ใหญ่ทำ CPU เพิ่มได้

การ Encode/Decode Table ใหญ่ซ้ำ ๆ ใช้ CPU

เช่นส่ง Inventory ทั้งชุดเมื่อ Item เดียวเปลี่ยน

สามารถพิจารณา Delta Update

item bread
amount +1

แทน Full Dataset

㊺ JSON ใหญ่มากต้องระวัง

ทั้ง Lua/JavaScript สามารถเสียเวลาจาก

  • Encode

  • Decode

  • Copy

ถ้าเกิดถี่

ควร Profile ก่อนตัดสินว่า Network เป็นปัญหาเพียงอย่างเดียว

㊻ State Bag Spam ก็ทำ CPU ได้

แม้ Enhanced ปรับ State Bags ให้มีประสิทธิภาพขึ้นมาก

แต่ถ้า Script Set State หลายพันครั้งต่อวินาทีโดยไม่จำเป็น ก็ยังสร้าง Workload

Platform Optimization ไม่แทน Resource Design

㊼ Set State เฉพาะเมื่อค่าเปลี่ยน

จาก

locked=true
locked=true
locked=true

ทุก Tick

ให้ Set ครั้งเดียวตอน State เปลี่ยน

นี่เป็น Optimization ที่ง่ายแต่มีผลมากเมื่อ Entity เยอะ

㊽ Routing Bucket Logic ต้องระวัง

Housing/Mission Systems ที่ Loop

  • Player ทุกคน

  • Bucket ทุกอัน

  • Entity ทุกตัว

ถี่เกินไปสามารถสร้าง Scaling Problem

ใช้ Events เมื่อ Player เข้า/ออก Bucket จะเหมาะกว่าในหลายกรณี

㊾ Resource Restart แล้ว CPU ลดลงทันทีเป็นเบาะแสสำคัญ

สมมติ

CPU 85%
restart custom-resource
CPU 35%

Resource นั้นต้องถูกตรวจอย่างจริงจัง

แต่ยังอย่าเพิ่งสรุป 100%

ต้อง Re-enable และ Reproduce เพื่อยืนยัน

㊿ ใช้ Binary Isolation ได้

ถ้าไม่รู้ Resource ไหนเป็นปัญหาและมี Custom Resources หลายตัว

บน Test Server สามารถ

  1. ปิดครึ่งหนึ่ง

  2. ทดสอบ

  3. เลือกกลุ่มที่ยังมีปัญหา

  4. แบ่งครึ่งอีก

  5. ทำซ้ำ

ช่วยหา Resource ต้องสงสัยได้เร็ว

51. อย่าปิด Core Resource สุ่มบน Production

เช่น

  • Framework

  • Inventory

  • Database

  • Multicharacter

อาจทำให้ Data หรือ Gameplay มีปัญหา

ควรใช้ Staging เมื่อทำ Isolation

52. Script Start ได้ไม่ได้แปลว่า Optimize

Resource สามารถ

Started resource xyz

ปกติ

แต่ทำ Heavy Loop หลัง Start ทุก Tick

Console ไม่มี Errorก็ยังสามารถกิน CPU สูงได้

Profiler จึงสำคัญ

53. Resmon ใช้หา Server CPU ได้ไหม?

ไม่ใช่เครื่องมือหลัก

Resmon เป็น Resource Monitor ฝั่ง Client สำหรับดู CPU Time และ Memory ของ Client Resources

ถ้า FXServer CPU สูง ใช้

  • Profiler

  • txAdmin

  • Server Metrics

ก่อน

54. ทำไมต้องแยก Client กับ Server CPU?

Resource หนึ่งตัวอาจมี

client.lua → 2.0 ms
server.lua → เบามาก

หรือกลับกัน

Server CPU สูงไม่ได้หมายความว่า Resmon ต้องสูง

เป็นคนละ Process/Workload

55. CPU สูงแต่ผู้เล่น FPS ดีเกิดได้ไหม?

ได้

ถ้า Bottleneck อยู่ Server-side

ผู้เล่นอาจมี FPS 100 แต่

  • Inventory Delay

  • Event Delay

  • Vehicle Spawn ช้า

เพราะ Client Rendering ปกติแต่ Server Processing ช้า

56. FPS ต่ำแต่ Server CPU ต่ำก็เกิดได้

ถ้า

  • MLO หนัก

  • Vehicle High-poly

  • NUI หนัก

  • Client Loop หนัก

Server CPU อาจ 20% แต่ผู้เล่น FPS ต่ำ

อย่าปะปนปัญหา

57. CPU สูงจาก Voice ได้ไหม?

Voice และ Networking เพิ่ม Workload ตามจำนวน Player

โดยเฉพาะ Community ใหญ่

แต่ก่อนสรุปว่า Voice เป็นต้นเหตุให้ดู Metrics/Profiler และทดสอบ Configuration จริง

อย่าปิด Voice Production เพื่อเดาสุ่ม

58. OneSync มีผลกับ CPU อย่างไร?

OneSync ต้องจัดการ

  • Players

  • Entities

  • Culling

  • Network State

เมื่อ Player/Entity เพิ่ม Workload ก็เพิ่ม

FiveM Enhanced ได้ปรับ Culling และ Server-side Performance เพื่อใช้ CPU ได้มีประสิทธิภาพขึ้นในหลาย Scenario

59. Enhanced ลด CPU ได้อัตโนมัติไหม?

Cfx.re ระบุว่า Cfx Server Enhanced ใช้ CPU ต่ำลงในบาง Scenario

แต่คำสำคัญคือ

บาง Scenario

Heavy Script ที่เขียนไม่ดีจะยังหนักอยู่

60. Enhanced Metrics ช่วยหา CPU Bottleneck ได้อย่างไร?

Enhanced เพิ่ม Prometheus-compatible Metrics มากกว่า 80 รายการ

รวมถึงข้อมูลเกี่ยวกับ

  • Main/Network/Sync Thread Tick Times

  • OneSync Entities

  • State Bags

  • JavaScript/Lua Memory

  • NetID

  • Network

  • Event Loop Queue

ทำให้ดูได้ว่า CPU Problem สัมพันธ์กับ Layer ไหน

61. ถ้า svMain Tick สูงควรคิดถึงอะไร?

โดยทั่วไปให้ตรวจ Server Main Workload เช่น

  • Scripts

  • Events

  • Gameplay Logic

จากนั้นใช้ Profiler เจาะ Resource

ไม่ควรใช้ Thread Metric เพียงตัวเดียวฟันธงชื่อ Resource

62. ถ้า Sync Load สูงต้องดูอะไร?

ตรวจ

  • Player Count

  • Entity Count

  • OneSync

  • State Bags

  • Resource ที่สร้าง Entities

Server ที่มี Entity Leak สามารถเพิ่ม Sync Workload ได้มาก

63. JavaScript Event Loop Queue สูงควรตรวจอะไร?

Resource JavaScript อาจมี Workload ที่สะสม

เช่น

  • CPU-heavy Logic

  • Callback จำนวนมาก

  • I/O Workflow

Enhanced Metrics มีข้อมูล Event Loop Queue Depth ช่วยเป็นเบาะแส

แล้วใช้ Profiler/Code Audit ต่อ

64. Lua Memory สูงคือ CPU Problem หรือไม่?

ไม่โดยตรง

แต่ Memory และ Garbage Collection สามารถสัมพันธ์กับ CPU ได้

Script ที่สร้าง Table/Object จำนวนมหาศาลแล้วทิ้งตลอดเวลาอาจสร้าง GC Pressure

ต้อง Profile จริง

65. สร้าง Table ใหม่ทุก Tick ต้องระวัง

ตัวอย่าง

while true do
    Wait(0)

    local data = {
        -- ข้อมูลจำนวนมาก
    }
end

ถ้าทำบ่อยมากจะสร้าง Allocation จำนวนมาก

ควรดูว่า Cache/Reuse Data ได้หรือไม่

66. JavaScript สร้าง Object จำนวนมากก็เช่นกัน

Garbage Collector ต้องจัดการ Object ที่หมดอายุ

Modern Node.js มี GC ที่มีประสิทธิภาพ แต่ไม่ใช่เหตุผลให้สร้าง Object จำนวนมหาศาลโดยไม่จำเป็น

67. String Concatenation/JSON Logging จำนวนมากต้องระวัง

โดยเฉพาะใน Loop

สร้าง JSON
↓
สร้าง String
↓
Print
↓
เขียน Log

ทำหลายพันครั้งอาจกิน CPU/I/O

68. CPU Spike ตอน Autosave ต้องตรวจ Save Architecture

Server RP อาจ Save Player ทุกคนพร้อมกัน

เช่นทุก 5 นาที

Player 300 คน
↓
Save พร้อมกัน
↓
SQL Burst
↓
CPU/DB Spike

สามารถพิจารณากระจาย Save Load หรือใช้ Strategy ที่เหมาะสม

69. Payday ก็เป็น Burst Event

ถ้า Payday ทำ

  • เงิน

  • SQL

  • Society

  • Logs

  • Notifications

กับ Player ทุกคนพร้อมกัน อาจเกิด Spike

Profiler ตอน Payday จะช่วยเห็น Resource ได้ชัด

70. Player Connect Spike ต้องตรวจ

ตอน Restart แล้ว Player 200 คน Reconnect พร้อมกัน Resource หลายตัวอาจ

  • Query Character

  • Load Inventory

  • Load Phone

  • Load Housing

  • Send Config

พร้อมกัน

ต้องทดสอบ Join Storm ด้วย

71. Resource Start Order มีผลได้

Resource ที่ Start ก่อน Dependency พร้อมอาจ Error/Retry ซ้ำ ๆ

ตรวจ

Database
↓
Libraries
↓
Framework
↓
Core Resources
↓
Gameplay Resources

ตาม Dependency จริง

ลด Error Loop และ Retry ที่ไม่จำเป็น

72. CPU สูงจาก Anti-cheat ได้ไหม?

Anti-cheat บางระบบตรวจ Player/Entity/Event ถี่มาก

ควรใช้ Version ที่ผู้พัฒนารองรับและ Benchmark บน Player Count จริง

แต่ไม่ควรปิด Security System บน Production เพียงเพื่อให้ CPU ลด

ใช้ Staging ทดสอบ

73. Logging Resource ก็หนักได้

Server ที่ Log ทุก

  • Movement

  • Inventory Action

  • Entity

  • Event

ไป Database/Webhookทันที สามารถสร้าง Load สูง

พิจารณา

  • Batch

  • Queue

  • Rate Limit

ตามความเหมาะสม

74. Discord Webhook ทุก Action ควรระวัง

HTTP Request จำนวนมากมี Cost

เช่น 500 Players ทำ Interaction บ่อย

หากส่ง Webhook ทุกครั้งอาจเพิ่ม I/O/Queue

Log เฉพาะสิ่งจำเป็นและรวม Event เมื่อเหมาะ

75. ซื้อ CPU ใหม่ควรเป็นขั้นตอนสุดท้ายหรือไม่?

ไม่จำเป็นต้องสุดท้ายเสมอ แต่ควรมีข้อมูลก่อน

ถ้า Profile แล้วพบว่า

  • Scripts สมเหตุสมผล

  • Database ดี

  • Entity ไม่ Leak

  • Workload จำเป็น

  • CPU Thread ยังเต็ม

การ Upgrade Hardware จึงมีเหตุผล

76. CPU รุ่นใหม่ช่วย FiveM อย่างไร?

ให้ความสำคัญกับ

  • Strong per-core Performance

  • Adequate Core Count

  • Stable Clock

  • Cooling

FiveM มีทั้ง Thread-sensitive และ Multi-core Workload

อย่าดูเพียงจำนวน Core สูงที่สุด

77. VPS CPU อาจเป็นปัญหาได้

VPS บางแห่งใช้ Shared CPU

แม้ Dashboard แสดง vCPU หลาย Core แต่ Performance อาจแกว่งตาม Neighbor Load

Production Server ขนาดใหญ่ควร Benchmark CPU จริง

78. Dedicated Server เหมาะเมื่อไร?

เมื่อ

  • Player Count สูง

  • Performance ต้องคาดการณ์ได้

  • Shared CPU เป็น Bottleneck

  • ต้องควบคุม Network/Storage มากขึ้น

แต่ Dedicated ไม่ได้แก้ Script ที่ทำ O(n²)

79. CPU สูงเฉพาะ Peak Hour แปลว่าอะไร?

มีแนวโน้มว่า Workload Scale ตาม

  • Players

  • Entities

  • Voice

  • Database

ให้ Capture Profiler ตอน Peak

อย่า Restart ก่อน Capture ทุกครั้ง เพราะจะเสียหลักฐาน

80. ก่อน Restart Server ที่กำลัง CPU สูงควรทำอะไร?

ถ้ายังพอใช้งานได้และปลอดภัย ให้เก็บ

  • Player Count

  • CPU/RAM

  • Console

  • Profiler Capture

  • Metrics Snapshot

ก่อน Restart

ข้อมูลนี้มีค่ามากสำหรับหาต้นเหตุ

81. ทำ Performance Regression Test

หลังแก้ Resource ให้เปรียบเทียบ

ก่อนแก้
CPU 75%
Hitch 20 ครั้ง/10 นาที

หลังแก้
CPU 45%
Hitch 1 ครั้ง/10 นาที

แบบนี้จึงรู้ว่าแก้ได้จริง

82. อย่าใช้แค่ “รู้สึกลื่นขึ้น”

Performance Optimization ต้องมีตัวเลข

อย่างน้อยเปรียบเทียบ

  • Player Count เท่ากัน

  • Scenario เท่ากัน

  • Resource Version ชัดเจน

จึงจะเชื่อถือได้

83. Checklist หา Script กิน CPU

ขั้นแรก

  • ดู txAdmin CPU/RAM

  • ดู Thread Chart

  • ดู Player Count

Console

  • Hitch Warning

  • Error Spam

  • SQL Warning

Profiler

  • Capture ตอน CPU สูง

  • หา Spike

  • หา Resource

  • หา Function

Code

  • Wait(0)

  • Player Loop

  • Entity Loop

  • O(n²)

  • JSON

  • Logging

Database

  • Slow Query

  • Query Loop

  • Missing Index

Network

  • Event Spam

  • Large Payload

Entity

  • Leak

  • Cleanup

หลังแก้

  • Profile ซ้ำ

  • Load Test

  • Compare

84. วิธีแก้แบบเร็วเมื่อไม่รู้ Resource ไหน

ถ้ามี Test Server:

  1. Clone Production Config

  2. จำลอง Player/Workload

  3. Profile

  4. ดู Top Resource

  5. Disable Resource ต้องสงสัย

  6. Reproduce

  7. ถ้า CPU ลด เปิด Resource กลับ

  8. Reproduceอีกครั้ง

  9. ยืนยัน

  10. แก้ Source

นี่ดีกว่าลบ Resource จาก Production แบบเดาสุ่ม

85. ถ้าเป็น Paid Script ทำอย่างไร?

หากไม่มี Source

เก็บหลักฐาน เช่น

  • Profiler

  • CPU Pattern

  • Player Count

  • Steps to Reproduce

แล้วส่งให้ Developer

ถามหา

  • Updated Version

  • Optimization Patch

  • Enhanced-compatible Build

ถ้า Resource Critical และไม่ได้รับการดูแล อาจต้องเริ่มหา Alternative

86. Resource ที่อ้างว่า 0.00 ms เชื่อได้ไหม?

ตัวเลข Client Resmon ไม่ได้บอก Server-side CPU ทั้งหมด

Resource สามารถ Client เบามากแต่ Server หนัก

อย่าใช้คำว่า

0.00 ms optimized

เป็นหลักฐานว่า Resource ทั้งระบบเบา

ต้อง Profile Server ด้วย

87. สิ่งที่ไม่ควรทำเมื่อ CPU สูง

หลีกเลี่ยง

  • Restart แล้วจบ

  • เพิ่ม RAMเพื่อแก้ CPU

  • ล้าง Cache

  • ปิด Resource สุ่มใน Production

  • เปลี่ยน Framework ทั้งระบบก่อน Profile

  • ใช้ Resmon แทน Server Profiler

  • เพิ่ม Wait แบบสุ่มจน Gameplay ช้า

  • ซื้อ Dedicated Server ก่อนรู้ Bottleneck

  • Ignore SQL

  • Ignore Entity Count

ต้องแก้สาเหตุ ไม่ใช่กลบอาการ

88. คำถามที่พบบ่อย

FiveM Server CPU สูงเกิดจากอะไร?

มักเกิดจาก Script Loop, Player/Entity Scan, SQL ช้า, Event Spam, Entity จำนวนมาก หรือ Resource ที่ Scale ไม่ดี

ดู Resource กิน CPU อย่างไร?

ใช้ Server Profiler และดู txAdmin Server Thread Performance

Resmon ใช้ดู Server CPU ได้ไหม?

Resmon เน้น Client Resource CPU/Memory ไม่ใช่เครื่องมือหลักสำหรับ FXServer CPU

Hitch Warning เกี่ยวกับ CPU ไหม?

เกี่ยวข้องได้ และเป็นสัญญาณว่า Resource/Thread ใช้เวลานานผิดปกติ

SQL ทำ CPU สูงได้ไหม?

Slow Queries และการประมวลผล Database สามารถสร้าง Hitch และเพิ่ม Workload ได้

Wait(0) ต้องลบทั้งหมดไหม?

ไม่ ต้องดูว่า Logic นั้นจำเป็นต้องทำทุก Frameหรือไม่

Restart แล้ว CPU ลดแปลว่าอะไร?

อาจมี Resource State, Entity, Cache หรือ Memory สะสม ต้อง Profile ก่อนและหลังเพื่อหาสาเหตุ

Resource ไหนกิน CPU มากที่สุดดูจากชื่อได้ไหม?

ไม่ได้ ต้องวัดด้วย Profiler

เพิ่ม RAM ช่วย CPU สูงไหม?

ไม่ถ้า CPU เป็น Bottleneck จริง

ซื้อ CPU แรงขึ้นช่วยไหม?

ช่วยเมื่อ Workload ถูก Optimizeแล้วแต่ Hardware ยังเป็นข้อจำกัด

89. สรุป FiveM Server CPU สูง แก้อย่างไร หา Script ตัวปัญหาให้เจอ

ถ้า FiveM Server CPU สูง สิ่งแรกที่ไม่ควรทำคือเดาว่า

Framework หนัก

หรือ

ต้องซื้อเครื่องใหม่

ให้เริ่มจาก

txAdmin
↓
CPU / RAM / Thread Performance
↓
Console
↓
Hitch Warning
↓
Profiler
↓
Resource
↓
Function
↓
Root Cause

จากนั้นตรวจ Root Cause ยอดนิยม ได้แก่

Loop ถี่เกินไป

โดยเฉพาะ Wait(0) บน Server

Player Loop

ที่ทำงานทุก Tick

O(n²)

ที่ Scale แย่มากเมื่อ Player เพิ่ม

Entity Scan

ที่ Loop รถ/Ped/Object ทั้งโลก

SQL Query ช้า

หรือ Query ใน Loop

Event Spam

จาก Client จำนวนมาก

Large Payload / JSON

ที่ Encode/Decode ถี่

Entity Leak

ทำ Entity Count เพิ่มตามเวลาที่ Server เปิด

Logging

ที่เขียน Console, Database หรือ Webhook มากเกินไป

สำหรับ FiveM Enhanced การวิเคราะห์ง่ายขึ้นอีกระดับ เพราะ Cfx.re เปลี่ยน Profiler Backend ไปใช้ Perfetto และเพิ่ม Metrics มากกว่า 80 รายการ ครอบคลุม Main/Network/Sync Threads, OneSync, Entities, State Bags, JavaScript/Lua Memory และ Network Activity

txAdmin เองสามารถแสดง CPU/RAM และ Server Threads Performance Chart พร้อม Player Count ทำให้เห็นได้ว่า CPU เพิ่มตามจำนวนผู้เล่นหรือเกิดจาก Background Resource

แนวทางที่ comsiam แนะนำคือ

Measure
↓
Capture ตอนปัญหาเกิด
↓
Find Resource
↓
Find Function
↓
Fix Loop / SQL / Events / Entities
↓
Load Test
↓
Profile Again
↓
Production

จำสั้น ๆ:

CPU สูง → ดู Thread

Hitch → Profiler

Player เพิ่มแล้ว CPU พุ่ง → ตรวจ Scaling

CPU เพิ่มตามเวลาที่เปิด → ตรวจ Leak

CPU Spike ตอน Save → ตรวจ SQL/Autosave

CPU Spike ตอน Event → Profile Event Resource

Resource Restart แล้ว CPU ลด → ตรวจ Resource นั้น

Resmon → Client ไม่ใช่คำตอบหลักของ Server CPU

Hardware → Upgrade หลังรู้ Bottleneck

FiveM Server ที่ Optimize ดีไม่ใช่ Server ที่ CPU ต่ำตลอดเวลา แต่คือ Server ที่มี Headroom เพียงพอ ไม่มี Thread Hitch ต่อเนื่อง และสามารถรองรับ Peak Gameplay ได้โดย Resource แต่ละตัวทำงานเฉพาะเท่าที่จำเป็น

Comments

Popular posts from this blog

FiveM ยังน่าเล่นไหม? Enhanced เปลี่ยน FiveM แค่ไหน

FiveM คืออะไร เล่นอย่างไร สำหรับมือใหม่ เริ่มต้นตั้งแต่ศูนย์

วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด