For home hosts and communities

Plan your EQ2Emu server.

Running a world for yourself, a few friends, or a larger group? Compare the CPU, RAM, and loaded zones your setup may need, then choose a sensible first test.

How we estimated this →

A practical starting point

Start with your own setup.

Enter the computer you have or the number of people you expect. We show a starting configuration or load-test size, plus what to watch. The result is not a guaranteed player limit.

01

Solo or with friends

The one-player light-zone run peaked at 2.56 GiB of world memory; this calculator keeps a 2.8 GiB planning floor. Four GiB total RAM is tight when the database and OS share the machine.

02

Count loaded zones

Zones can stay loaded for 300–600 seconds after a player leaves, and some stay longer. Include those alongside zones where someone is playing.

03

Watch one busy zone

Players spread across zones are different from a crowd in one city. Average CPU and RAM can look healthy while a crowded zone lags.

Compare smaller hosts
Your OS, database, and game client still need the separate reserves below.
A VPS vCPU may be slower than a dedicated desktop core. Reserve CPU below for the database, game client, and other programs.
Occupied zones are calculated as population grows. High densities need a separate latency test.
Always-loaded zones and zones waiting to sleep after players leave. Often 300–600 seconds; some rules run longer.
Think of your busiest city, raid, or event. If blank, we can only assume an even spread; this field changes the latency warning, not a measured CPU/RAM estimate.
Map selection strongly affected RAM in the 200-zone tests.
Some large maps and NPC activity are outside the populated resource matrix. We flag this separately because no reliable multiplier was measured.
These are rough planning factors, not a benchmark of your exact processor.
Use a lower reserve when MariaDB is elsewhere. Include login, Apache/PHP, a web editor, and normal background apps if they share this computer.
Core equivalents, separate from worldserver work. Use 0 if those services have their own CPUs; increase this for a busy game client or database. This reserve is your estimate, not a measured benchmark value.

Calculating a starting point…

Behind the numbers

Why this is a starting point.

2.8 GiB budget

Small-world RAM

The current one-player, three-loaded-zone run peaked at 2.56 GiB. The calculator retains a higher light-world planning floor; your OS, database, login service, and web tools need separate memory.

4.40 → 10.43 GiB

More zones and maps

At 400 synthetic players, peak world memory rose from 102 loaded zones to a distinct-map 302-zone selection. The same number of zones can also differ greatly by map content.

24 / 48 / 64

Players per zone

At 400 players, 24 per zone had no long main-loop intervals in one short run; 48 grew a network queue, and 64 had 36 intervals over 100 ms. There is no universal safe cap.

100–300

A crowded city

Earlier single-zone runs exposed update-round delays as players gathered, even when whole-world CPU was spare. Enter a likely busiest-zone population to see this warning.

Measured examples: solo and friends

Current jemalloc build, 120-second synthetic holds in light introductory and small-room maps, with two other zones loaded. MariaDB and the client generator were outside the world allocation. These are worldserver observations, not total home-PC use or a player limit.

PlayersOccupied / loaded zonesMean CPU coresPeak world RAMWorld threads
1 solo1 / 30.0342.56 GiB23
6 together1 / 30.0442.56 GiB23
6 spread2 / 40.0462.56 GiB26
12 together1 / 30.0532.45 GiB23
12 spread3 / 50.0592.61 GiB29

The non-monotonic memory peaks reflect allocator and zone-selection differences; they do not mean adding players saves RAM. The calculator retains a 2.8 GiB light-world planning floor. With OS, MariaDB, and login on the same machine, 2 vCPU / 8 GiB is a sensible small-group starting test; 2 vCPU / 4 GiB has little headroom. More or larger loaded zones, or a game client on the same PC, can require more.

Measured example: four players per zone

Worldserver alone, 180-second synthetic holds. The 100–300-player rows use the newer build; the 400-player row is the previous build and remains the zone-layout anchor. These are observations, not player limits.

PlayersOccupied / loaded zonesMean CPU coresPeak world RAMZone threads + overhead
10025 / 270.293.09 GiB95
20050 / 520.543.17 GiB170
30075 / 770.873.39 GiB245
400100 / 1021.114.40 GiB320

All rows had populated main-loop p99 in the 16.384-ms histogram bucket and no measured intervals over 100 ms. More players in one zone or different maps can change the result sharply.

Read the test method and calculator limits

These are local Linux Release screens on a Core Ultra 9 275HX with four allocated logical CPUs, jemalloc, version-843 headless sessions, movement at 8 Hz, and a self-cast every five seconds. MariaDB and the generator were outside the world allocation. Small-group holds lasted 120 seconds; 100–400-player holds lasted 180 seconds. The 400-player runs vary occupied-zone density and selected maps; they supply the zone-layout CPU/RAM curve. Matched 100/200/300-player runs on the newer build, at four players per zone, calibrate its lower-population CPU estimate. The new 1/6/12-player cases check the conservative low-end estimate for a few light maps; their lower RAM peaks are not applied as a universal discount because map selection and allocator state vary. Older 100/200/300-player single-zone runs supply latency warnings only; they used an earlier build and are not current CPU/RAM anchors.

The newer groundspawn/map-allocation work reduced the 100-empty-zone sampled peak by 266 MiB, but has not been rerun across the 400-player layout matrix, so no blanket saving is subtracted. The measured populated layouts stop at 400 players and 302 loaded mostly-distinct-map zones (202 shared-map zones). Beyond those points, the calculator extends the last observed zone slope, allows 2 MiB per additional player, and adds a planning allowance that grows 20% for each additional measured-range multiple. These are heuristics, not measured confidence bounds. The CPU reserve for other programs is your estimate, not a measured database/game-client CPU result. Each additional world peer repeats substantial startup memory. The 20,000-player/zone input guard is for calculator safety, not a capacity claim. Busy-zone latency, heavy content, arrival bursts, co-hosted software, and processor differences may invalidate a projection before its resource budget is reached.

Source reports in EQ2Emu source: docs/performance/sizing-small-host-2026-10-02.md, docs/performance/sizing-population-calibration-2026-10-02.md, docs/performance/jemalloc-current-capacity-screen-2026-10-01.md, docs/performance/spawn-movement-filter-2026-09-30.md, docs/performance/zone-load-memory-2026-10-02.md, and tools/capacity/SIZING.md.