Running a game server for 100 or more concurrent players is a different challenge than hosting a small server for friends. At scale, bottlenecks that barely register at 20 players become game-breaking performance killers. Here is how to tune your dedicated server hardware and software to handle triple-digit player counts without lag, stuttering, or crashes.
For hosting providers capable of handling high player counts, compare dedicated server plans with the hardware specs we recommend below.
CPU Optimization: Clock Speed, Core Pinning, and Thread Isolation
Most game server engines run their main simulation loop on a single thread. For 100+ players, that thread needs every clock cycle it can get. Start with a CPU that offers at least 4.5 GHz turbo boost on its primary core — chips like the AMD Ryzen 9 7950X or Intel Core i9-14900K deliver the single-threaded performance that large game servers demand.
Use CPU core affinity (taskset on Linux) to pin the game server process to specific high-performance cores. Reserve one or two cores for the OS and background services. Here is a concrete example for a 12-core/24-thread Ryzen 9 7900X:
# Reserve cores 0-1 for OS/IRQ
# Pin game server to cores 2-9 (8 physical cores)
taskset -c 2,3,4,5,6,7,8,9 java -Xms16G -Xmx32G \
-XX:+UseG1GC -XX:+ParallelRefProcEnabled \
-XX:+DisableExplicitGC -XX:+AlwaysPreTouch \
-jar paper-1.21.jar nogui
# Verify pinning:
ps -eo pid,psr,comm | grep java
Thread Isolation with isolcpus
For maximum performance, use the Linux kernel isolcpus boot parameter to completely remove designated cores from the scheduler. Add this to your GRUB_CMDLINE_LINUX:
# /etc/default/grub
GRUB_CMDLINE_LINUX="isolcpus=2,3,4,5,6,7,8,9 nohz_full=2,3,4,5,6,7,8,9 rcu_nocbs=2,3,4,5,6,7,8,9"
# After editing run: update-grub
With isolcpus, the kernel never schedules background tasks on those cores, giving your game server uncontested access. Pair this with the performance CPU governor:
# Force performance governor on game cores
for cpu in /sys/devices/system/cpu/cpu[2-9]/cpufreq/scaling_governor; do
echo performance >
done
# Disable turbo for consistent frequency
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo
RAM: Capacity, Allocation, and Game-Specific JVM Tuning
For 100+ players, 64 GB of RAM is the baseline. Heavily modded servers or multi-instance setups need 128 GB. But capacity alone is not enough — how you allocate that RAM matters. Here are game-specific configurations with proven results:
| Game | RAM Allocation | Key Flags / Settings | Impact at 100 Players |
|---|---|---|---|
| Minecraft (Paper 1.21) | 16G–32G heap | -Xms16G -Xmx32G -XX:+UseG1GC -XX:MaxGCPauseMillis=50 | GC pauses drop from 150ms to 30ms |
| Rust (vanilla) | 16G–24G | gc.buffer 256, gc.interval 300, server.tickrate 20 | Eliminates tick skip during GC |
| ARK: Survival Evolved | 16G+ | -useallavailablecores, -sleepexclusive | 35% faster world save times |
| Palworld | 16G–32G | Use RAM disk for saves (tmpfs) | 80% reduction in save-time lag |
| Valheim | 8G–16G | saveinterval 900, compress-saves true | Smoother saves, less stutter |
Network Tuning for High Player Density
At 100 players, your server sends 100+ UDP packets every tick (20–30 times per second). The default Linux network stack is not optimized for this workload. Apply these kernel-level changes:
# /etc/sysctl.d/99-gameserver.conf
# Increase UDP buffer sizes
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
# Backlog for burst handling
net.core.netdev_max_backlog = 50000
net.core.somaxconn = 4096
# Enable BBR congestion control
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# Apply with: sysctl -p /etc/sysctl.d/99-gameserver.conf
For the game server port specifically, set QoS marking to minimize delay:
# Mark game traffic as Minimize-Delay (DSCP EF)
iptables -t mangle -A PREROUTING -p udp --dport 27015 -j TOS --set-tos 0x10
iptables -t mangle -A PREROUTING -p udp --dport 27015 -j DSCP --set-dscp-class EF
# At 100 players x 50 Kbps average = 5 Mbps base
# Combat spikes can reach 300+ Mbps
# Minimum: 1 Gbps unmetered uplink
Storage: Eliminating Save-Triggered Lag
The biggest source of lag on large game servers is the periodic world save. When the server writes to disk, it pauses the game loop. With 100 players and large worlds, a save that takes 2–3 seconds causes widespread rubberbanding.
Solutions: Use NVMe SSD with write speeds above 3000 MB/s (Samsung PM9A3 or equivalent). Increase save intervals from 300 seconds to 900 seconds for main saves, and use differential or incremental saves. For Minecraft, use Chunky to pre-generate chunks — this eliminates lag when players explore new areas and reduces save file size by 40–60%.
# Minecraft: Pre-generate world with Chunky
# /chunky radius 5000
# /chunky start
# Rust: Use LevelManager plugin
# levelmanager.compress true
# Compresses save files by 60-70%
# RAM disk saves (Palworld):
mount -t tmpfs -o size=8G tmpfs /path/to/saves
# Sync to disk every 5 minutes
*/5 * * * * rsync -av /path/to/saves /persistent/backup/
Monitoring: The 100-Player Dashboard
Set up real-time monitoring with Netdata or Grafana + Prometheus. Watch these three metrics specifically:
- CPU steal time — If using a virtualized environment, steal time above 5% means the host is oversubscribed. On a dedicated server, this should always be 0%.
- Network dropped packets — Monitor /proc/net/udp for drops. Any persistent packet loss above 0.1% indicates buffer under-allocation or insufficient uplink.
- Average tick rate — For Rust and other tick-driven games, a drop below 15 TPS (from the target 20) means the server cannot keep up with the simulation load.
Check server specs on our site for hosting plans with the CPU clock speeds, RAM configurations, and unmetered bandwidth that 100-player game servers demand.




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