Optimizing Your GMod Server Performance
How to diagnose and improve GMod server performance through tickrate selection, addon management, ConVar tuning, and CPU considerations.
GMod is Single-Threaded
The most important fact about GMod server performance: the game server runs on a single CPU core. Having more CPU cores does not help server performance. What matters is single-core clock speed — higher GHz means a more responsive server.
When evaluating server hardware for GMod, prioritize CPU clock speed over core count.
Monitoring Server Performance
The most useful in-game diagnostic is net_graph 4. Connect to the server as a client and run this in the console. The server frame time bar shows how much time each tick takes to process. If the bar turns red, the server is overloaded and ticks are taking longer than their budget.
From the server console:
stats
This outputs CPU usage, network bandwidth, uptime, and current map. Run it periodically to baseline your server's load.
Tickrate Selection
Tickrate is the number of game simulation steps per second. It is set at launch and cannot change at runtime:
-tickrate 33
| Tickrate | Best for | CPU cost |
|---|---|---|
33 |
DarkRP, high player count RP | Low |
66 |
TTT, deathrun, sandbox | Higher |
Higher tickrate means the server processes more frames per second, increasing CPU usage proportionally. DarkRP with 40 players at tickrate 66 will be noticeably harder on CPU than at tickrate 33. TTT benefits from 66-tick because precise shooting mechanics matter.
Do not use tickrate values other than 33 or 66. Non-standard values can cause client-side prediction issues.
fps_max
fps_max 550
fps_max caps the server's rendering loop. At tickrate 33, the server runs 33 logic ticks per second but may process more frames for network packaging. Setting fps_max 550 is a well-established sweet spot. Setting it too low (e.g., fps_max 33) causes network stuttering. Setting it unlimited wastes CPU on a tight loop.
Addon Count
Addon count is the single biggest controllable performance variable. Every addon's Lua code runs on every tick that triggers its hooks. More addons = more processing per tick.
Guidelines:
- DarkRP servers with 30+ players: keep under 50 addons
- DarkRP servers with 20 or fewer players: under 75 addons
- Sandbox servers: under 100 addons
Audit your addon list periodically. Remove addons that are rarely used. Duplicate functionality (two different weather systems, two different car packs) is a common source of bloat.
Enabling Parallel Network Processing
sv_parallel_packentities 1
sv_parallel_sendsnapshot 1
These ConVars allow some network packaging work to run on threads separate from the main tick thread. The benefit is modest but free — enable them in server.cfg.
Sandbox Entity Limits
Prop spam is a major performance and crash risk on sandbox servers:
sbox_maxprops 100
sbox_maxragdolls 5
sbox_maxnpcs 10
sbox_maxballoons 10
sbox_maxeffects 40
Each entity in the world consumes tick processing time. Unconstrained prop spawning can crash a server in minutes. Set these limits based on your player count — lower is safer.
Memory Management
GMod's Lua VM allocates memory for objects that may not be promptly garbage-collected. On servers running for many days, Lua memory usage grows. Symptoms include "Lua Panic: Not enough memory" in the console and increasing lag over time.
Mitigations:
- Schedule a regular restart (e.g., every 12–24 hours during low-traffic time) to reset the Lua VM
- Audit addons for memory leaks: tables that grow indefinitely, timers that create new objects repeatedly, or hooks that are added multiple times
- Reduce global table storage in addons where possible
DarkRP-Specific Tuning
DarkRP is the most performance-intensive common gamemode:
- Use tickrate 33
- Keep addons under 50
- Prefer a dedicated map (not a general sandbox map)
- Disable unused DarkRP modules in
darkrp_config/config.lua - Restart the server every 12–24 hours to clear accumulated Lua state
Network Rate Settings
Match sv_maxupdaterate to your tickrate:
sv_maxupdaterate 33
sv_minrate 20000
sv_maxrate 100000
sv_maxupdaterate 66
sv_minrate 20000
sv_maxrate 100000
Sending more updates than the tick rate is meaningless and wastes bandwidth.