Every game server has a capacity ceiling, and every growing community eventually hits it on a launch night, a patch release, or a streamer raid. The choice is not whether to hit the ceiling but what happens when you do. Without a queue, players get connection-refused errors and a bad first impression. With one, they wait in a predictable line and the server stays at 20 TPS.
This covers the queue, priority, and overflow patterns that hold up under real load, with the configuration fields and capacity math for each.
Why a full server is worse than a slow one
A server at 64/64 slots with 80 more players hammering the connect endpoint spends CPU on authentication, session setup, and packet rejection — work that competes directly with the tick thread. The result is that everyone already playing experiences lag because of players who are not in the game. Rate-limiting the connection path protects the players who are.
| Strategy | Player experience | Tick impact at +50% overflow | Implementation |
|---|---|---|---|
| Reject connections | Connection refused, retry loop | P99 tick +40-120% | Default behavior |
| Hard cap + kick queue | Kicked on reconnect attempt | +10-30% | Simple, brittle |
| Proxy queue (Velocity/BungeeCord) | ‘Position 12 in queue’ | +2-5% | Recommended |
| Queue + priority lanes | Donors/staff jump the line | +2-6% | Needs permissions layer |
| Overflow instance (auto-spin lobby) | Play on a second world | +1-3% | Highest cost, best UX |
Queue mechanics that actually work
- Set the queue at the proxy, not the backend. Velocity and BungeeCord both support queue plugins. The backend never sees the overflow traffic, so the tick thread is untouched.
- Advertise position and ETA. Players tolerate a queue they can see. ‘Position 14, about 4 minutes’ converts to a wait; a spinning cursor converts to a quit.
- Cap the queue. An unbounded queue just moves the rejection later and wastes the player’s time. Two to three times server capacity is a reasonable ceiling.
- Use a token bucket for reconnects. Without it, a single client reconnecting 20 times a second occupies a queue slot continuously.
- Reserve slots. Keep 4-8 slots free for staff and donors so support can join a full server.
Priority and fair queueing
A flat queue is unfair to players who hold a slot, contribute, or provide support. A tiered system keeps the community’s most invested members playing while everyone else waits in order.
| Tier | Reserved slots | Queue weight | Access rule |
|---|---|---|---|
| Owner / admin | 2 | Immediate | Full bypass |
| Staff / moderators | 2 | Immediate | Full bypass |
| Donor / patron | 4 | 1.5x priority | Reserved pool, then queue |
| Whitelisted regulars | 0 | 1.2x priority | Reduced wait |
| Everyone else | 0 | 1.0x | Standard queue |
Keep the reserved pool small. If donors can reserve more than about 10% of capacity, free players never get in and the community shrinks — which eventually shrinks the donor base too.
Overflow instances: spinning up a second world
The strongest answer to a launch spike is to send overflow players somewhere they can play rather than wait. Two approaches work:
- Static overflow: a second, smaller instance on the same machine (or a second node) that accepts overflow players in a lobby or minigame world. Cost is fixed; capacity gain is immediate.
- Dynamic overflow: automation watches player count and starts a pre-configured instance when the primary passes 85% capacity, stopping it when load falls. Tools like Pterodactyl or a systemd target triggered by a metrics threshold handle this.
Budget the hardware for it. One extra instance at 32 slots needs another 4.5 GHz core for its tick thread, 8-12 GB RAM, and roughly 512 MB of headroom on a 1 Gbps port at peak. Plan overflow into the node spec rather than discovering you have no free cores when the spike arrives.
Configuring the queue on Velocity
Most production queue setups use a Velocity proxy in front of one or more backend servers, because the proxy absorbs all connection traffic and the backend never sees a rejected player. A typical configuration reserves a small pool of slots and sets a queue cap above server capacity.
max-queue-size=128for a 64-slot server — roughly two times capacity, enough to absorb a spike without promising a wait nobody will sit throughreserved-slots=4for staff and donors, checked before the public pool is filledqueue-position-notify=1broadcasts position updates every second; silent queues lose playersconnection-throttle=2000(ms) rejects reconnect hammering without blocking legitimate retries- Log queue length and average wait to your metrics pipeline — a rising average wait is the first sign you need another instance
Test the queue before you need it. Run a load test that opens 150 simultaneous connections to a 64-slot backend and confirm players are queued rather than refused, that positions advance, and that the tick thread’s P99 does not move. A queue that has never been under load is a queue that will fail on launch night.
Metrics that tell you a spike is coming
Queue systems are the last line of defense. Earlier warning comes from watching the right numbers:
| Metric | Watch threshold | Action |
|---|---|---|
| TPS (rolling 1-min) | < 19.5 | Investigate entity/plugin load |
| P99 tick time | > 45 ms | Reduce simulation, prepare overflow |
| Concurrent players | > 85% capacity | Pre-warm overflow instance |
| Connection attempts / sec | > 2x baseline | Enable queue, raise rate limit |
| Uplink utilization | > 70% sustained | Check port commitment and shaping |
Wire these to alerts, not dashboards. A dashboard nobody watched at 02:00 during a patch drop is the same as no monitoring. A running 1-minute average of 19.2 TPS is the signal to act before players notice, not after the Discord fills with complaints.
Overflow without a second node
Not every community can justify a second machine. Three lighter options still beat connection-refused errors:
- Lobby world on spare capacity: if the node has idle cores and RAM, a small lobby instance absorbs overflow with no extra hosting cost
- Minigame rotation: send overflow players into a lightweight gamemode that shares the backend process pool
- Scheduled restarts at predictable times: during a patch drop, announce a restart window rather than letting a full server degrade for everyone
Each of these trades a little experience quality for a lot of availability. The important thing is that overflow players get somewhere to go instead of a failure message; a lobby session converts a bounce into a session, and session data is what grows a community.
Size the underlying node for peak, not average. Queue and overflow logic buys you time, but the hardware ceiling is real: a single-thread-bound workload will not stretch past its clock. See the full specs and pricing for nodes sized for high concurrent counts, and compare uplink and filtering capacity across providers in our dedicated server comparison table.



Leave a Reply
You must be logged in to post a comment.