Server Performance Tuning
A well-tuned server runs smoother, handles more players, and wastes fewer resources. Most performance issues come from default settings — not from needing a bigger plan.
Understanding Your Resources
Check Current Usage
Your server control panel shows real-time resource graphs:
- CPU usage — how hard your server is working. Sustained use above 80% means you're under-provisioned.
- RAM usage — total memory consumed. Hitting the limit triggers the Out of Memory killer, crashing your server.
- Disk I/O — how fast data is being read or written. High I/O means lots of world activity or heavy mod load.
Baseline First
Measure your performance at rest (no players online) before tuning. Otherwise you can't tell if a change actually helped.
When to Upgrade
| Symptom | Likely Cause | Fix |
|---|---|---|
| TPS (ticks per second) below 20 | CPU bottleneck | Reduce entity counts, upgrade CPU allocation |
| Players lagging when >20 online | RAM ceiling | Increase RAM or reduce view distance |
| Chunks loading slowly | Disk I/O capped | Reduce pre-generation radius |
| Server crashes during peak hours | RAM exhaustion | Add more RAM, add GC flags |
| Consistent 100% CPU | CPU-limited | Upgrade tier or optimise plugins |
Minecraft Optimisation
Server Properties Tuning
Edit server.properties through your panel's file manager. These settings have the biggest performance impact:
# View distance: single largest performance factor
# Reduce from default 10 to 8 or 6 for large player counts
view-distance=8
simulation-distance=6
# Entity activation range
# Lower values = fewer mobs processed per tick
entity-broadcast-range-percentage=50
# Network compression
network-compression-threshold=256
# Disable unused features
allow-flight=false
spawn-protection=0
max-tick-time=60000Java Garbage Collection
Add these flags to your server's startup parameters in the panel:
-XX:+UseG1GC
-XX:+ParallelRefProcEnabled
-XX:MaxGCPauseMillis=200
-XX:+UnlockExperimentalVMOptions
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-XX:G1NewSizePercent=30
-XX:G1MaxNewSizePercent=40
-XX:G1HeapRegionSize=8M
-XX:G1ReservePercent=20
-XX:G1MixedGCCountTarget=4
-XX:InitiatingHeapOccupancyPercent=15
-XX:G1MixedGCLiveThresholdPercent=90
-XX:G1RSetUpdatingPauseTimePercent=5
-XX:SurvivorRatio=32
-XX:+PerfDisableSharedMem
-XX:MaxTenuringThreshold=1GC Flags Are Version-Specific
These flags target Java 21+ with the G1 collector. Older Java versions (8, 11) need different flags. Check your panel for the server's Java version before applying.
Plugin Optimisation
Not all plugins are created equal. Audit your plugin list:
- Remove unused plugins — every plugin adds tick overhead
- Check for known performance issues — search your plugins on the SpigotMC forums
- Use performance analyzers — install Spark to see which plugins are consuming the most tick time
- Limit chunk loaders — plugins that force-load chunks (like some land claim systems) multiply CPU usage
# Install Spark from console
/spark profiler start
# Let it run for 5-10 minutes during normal gameplay
/spark profiler stop
# Review the report URL it generatesPre-generating Your World
Generating chunks on-the-fly as players explore creates lag spikes. Pre-generate your world:
- Install the Chunky plugin
- Set a radius (e.g. 5000 blocks)
- Run generation during off-hours:
/chunky radius 5000
/chunky start
/chunky confirmPre-generation may take several hours for large radii. Run it overnight or during scheduled maintenance.
Scheduled Restarts
Restarting your server daily clears memory leaks and resets tick rate:
- Navigate to Scheduled Tasks in your control panel
- Create a new task:
- Action: Restart Server
- Frequency: Daily
- Time: 4:00 AM (your local timezone)
- Warning Broadcast: Enable and set to 5 minutes
Broadcast Warnings
Your panel can warn players before a restart. A 5-minute warning gives them time to finish what they're doing. Set it to broadcast at 5 minutes, 1 minute, and 30 seconds.
General Tips (All Games)
| Principle | Action |
|---|---|
| Fewer entities | Reduce mob caps, animal limits, and item despawn timers |
| Smaller world, better performance | Pre-generate and set a world border |
| Compress data | Enable network compression in your game's config |
| Schedule heavy tasks | Backups, world saves, and restarts should run during off-hours |
| Clean up regularly | Remove old backups, log files, and unused worlds |
| Use a ramdisk for maps | If your game supports it, load map data from memory instead of disk |
Need Help?
If you've tried everything here and performance is still poor, open a support ticket. Include a Spark profile or console log — it helps us diagnose the issue faster.