FiveM Resmon High?
How to Read It Right & Fix the Real Causes
Resmon is the most misread tool in FiveM server administration. This guide shows what the numbers actually mean, which scripts deserve the blame - and why your 50-car pack shows 0.00 ms while players still complain about lag.
What Resmon Actually Measures
Open the console (F8) and type resmon: you get a live table of every running resource with CPU time and memory. The key column is CPU msec - the milliseconds of main-thread CPU time a resource consumes per frame. At 60 FPS your entire frame budget is 16.6 ms; every millisecond a script burns is a millisecond the game cannot spend on rendering.
Reading the numbers (rule of thumb)
0.00–0.10 ms idle - healthy script.
0.10–0.50 ms idle - sloppy but tolerable; worth a look if you run many of these.
0.50–1.00 ms idle - a problem; this script is polling something every frame.
>1.00 ms idle - fix or replace it. Three of these and you have lost 20% of the frame budget to scripts doing nothing.
Always compare idle (standing still, no UI open) vs active (using the feature). A menu costing 2 ms while open is fine; 2 ms forever is not.
The Big Myth: “My Car Pack Shows 0.00 ms, So It’s Fine”
Resmon does not measure your vehicles. A car pack is streamed content - models and textures loaded by the engine’s streaming system and rendered on the GPU. None of that is script CPU time, so a 4 GB pack of unoptimized cars sits in resmon at 0.00 ms looking innocent while it:
- fills your players’ VRAM streaming budget with 30–60 MB texture dictionaries (the cause of texture loss),
- forces GPUs to render 300–500k-polygon showroom meshes with no distance LODs,
- tanks FPS for everyone near a car meet - while every script on the server reads green.
So the diagnostic is two-sided: resmon for script lag, vehicle optimization for rendering lag. If players report FPS drops around parked cars and your resmon is clean, the vehicles are the cause - run them through the Optimizer (40–70% size reduction, zero visible quality loss) instead of hunting ghosts in your scripts.
The Scripts That Actually Spike Resmon
1. Zero-wait loops
A while true loop with Citizen.Wait(0) runs every single frame. Fine for the few systems that need it (keybind capture), disastrous for distance checks or marker drawing. The fix is a dynamic wait: 500–1000 ms when the player is far from anything relevant, dropping to 0 only when close.
2. Per-frame distance math over big tables
Looping 200 shop locations with GetDistanceBetweenCoords every frame is the classic 1 ms+ idle offender. Use #(coords - playerCoords) on vector3s (cheaper), check less often, or switch to point-based zone systems that only wake up near a zone.
3. Event spam (server-side resmon)
Run resmon in the server console too. Scripts that fire network events on a timer for every player (position syncs, custom HUD updates) multiply with player count. Replace polling events with statebags or push-on-change patterns.
4. Always-on NUI
A HUD iframe re-rendering at 60 FPS costs CPU even when nothing changes. Send NUI messages on change only, not on a 100 ms timer - and watch the resource’s memory column grow if the page leaks.
Go deeper than resmon: the built-in profiler
Resmon tells you which resource is slow; the profiler tells you which function. In the F8 console: profiler record 500, reproduce the lag, then profiler view. The flame graph points at the exact Lua tick that burns your frame budget - no guessing.
The 15-Minute Action Plan
1. Baseline
Empty area, no UI, note every resource idling above 0.10 ms. That list is your script work queue.
2. Bisect
For each suspect: stop resource, watch the total drop. Confirmed offenders get the dynamic-wait / zone treatment, or a replacement.
3. Separate the lag types
Scripts clean but FPS still drops near vehicles? That is rendering load, not CPU - optimize the cars, check LODs, and read the full server optimization guide.
Resmon - Frequently Asked Questions
What is a good resmon value in FiveM?
Idle scripts should sit at 0.00–0.10 ms. Anything idling above 0.50 ms is polling every frame and worth fixing; above 1.00 ms is a real problem. Active states (menu open, feature in use) can legitimately cost more - judge scripts by their idle cost.
Why does my server lag when resmon shows nothing high?
Because resmon only measures script CPU time. Rendering load - unoptimized vehicle textures filling VRAM and high-poly models without LODs - never appears in resmon. If FPS drops near cars while resmon is clean, optimize the vehicle resources; that is the actual bottleneck.
Do car packs increase resmon?
No - a pure vehicle resource has no running script, so it shows ~0.00 ms. Its cost is VRAM and GPU rendering, which resmon cannot see. The exception: packs that bundle Lua (custom handling scripts, vehicle keys) do consume script time like any other resource.
How do I find which function makes a script slow?
Use the built-in profiler: in the F8 console run profiler record 500, reproduce the lag, then profiler view. The flame graph shows exactly which tick and function burns the time - far more precise than resmon’s per-resource totals.
Should I check resmon on the client or the server?
Both - they measure different machines. Client resmon (F8) finds scripts hurting player FPS; server console resmon finds scripts hurting tick rate and sync for everyone (event spam, heavy loops in server Lua). A healthy server needs both clean.
Scripts Clean? Fix the Other Half of the Lag.
Most “high resmon” complaints are actually rendering load from unoptimized vehicles. Cut your car resources 40–70% with zero visible quality loss.
Web-based • No download • Results in under a minute