Performance Tuning, UPS, and Player Capacity
How to monitor Factorio server performance via UPS, understand capacity limits, and tune settings to keep your server running smoothly.
Overview
Factorio performance is measured in UPS (Updates Per Second). The target is 60 UPS — at 60 UPS, the game runs in real time. Below 60, the game slows down proportionally. Understanding what drives UPS degradation helps you configure servers that stay healthy as bases grow.
Monitoring UPS
Check current UPS from the server console or via RCON:
/perf
This prints current UPS, game time, and timing breakdowns by subsystem (entity updates, transport belts, circuit network, etc.).
A healthy server reports 60.0 UPS. Values below 50 indicate the server is under load. Values below 30 mean gameplay is noticeably slowed — action is required.
The Single-Threaded Constraint
Factorio is single-threaded per save. Adding more CPU cores does not improve performance for a single server instance. What matters is:
- Single-core clock speed — Higher GHz directly improves UPS.
- CPU generation — Newer architectures (better IPC) outperform older high-clock CPUs.
- RAM — Large maps need significant RAM for the entity list; typical servers need 1–4 GB.
Player Capacity Guidelines
These are rough guidelines — actual capacity depends on base complexity and mod overhead:
| Players | Minimum CPU recommendation |
|---|---|
| 1–10 | Any modern CPU core |
| 10–50 | 4+ core CPU, high single-core speed |
| 50+ | High-end CPU (Ryzen 9 / Core i9 class) |
Player count itself adds roughly 5–10% CPU overhead per player for netcode and sync. The dominant factor at large player counts is base size, not player count directly.
UPS Killers
In order of typical impact:
- Large bases with millions of entities — Every belt segment, inserter, and assembler is simulated every tick.
- Bots (logistic and construction robots) — Bot pathfinding is expensive. Excessive bot counts tank UPS.
- Circuit networks — Complex combinators with frequent updates.
- Too many mods — Each mod adds simulation overhead. Performance-heavy mods (e.g., adds new entity types) compound the issue.
- Enemy bases — Large numbers of biter settlements on the map add AI pathfinding cost.
Tuning Options
Reduce entity count: Encourage players to use fewer but denser factory layouts. Merging belt lines reduces belt segment count significantly.
Limit player count: Set max_players in server-settings.json to a value your CPU can handle:
{
"max_players": 20
}
Adjust latency setting: The --latency-ms flag controls network tick batching (default 100ms). Increasing it reduces network overhead at the cost of perceived input lag:
./factorio/bin/x64/factorio --start-server saves/save.zip --latency-ms 150
Useful range is 50–500. Do not set below 50 on high-latency connections — it increases resyncs and disconnections.
Peaceful mode: Disabling enemies via peaceful_mode: true in map gen settings (new maps only) removes all enemy AI cost.
Reduce pollution spread: In map-settings.json, disable or reduce pollution to cut biter aggression and associated pathfinding overhead.
When UPS Drops Below 50
Immediate options:
- Run
/perfto identify the bottleneck subsystem. - Reduce
max_playersto lower netcode overhead. - Ask players to disable heavy mods temporarily.
- Increase
autosave_intervalto reduce autosave frequency (see Tuning Autosave Settings and Recovering from Backups). - Upgrade to a node with a faster single-core CPU.
Long-term options:
- Start a new map with a more performant design in mind.
- Remove performance-heavy mods before the base grows further.