Nothing kills a server faster than lag. Players leave, word spreads, and your 50-player community is down to 3 regulars before you know it. But here's the thing: most lag is fixable. These 10 optimizations cover 90% of performance issues we see as a host.
Step 1: Diagnose the Problem First
Before you change anything, figure out what kind of lag you're dealing with:
- TPS lag (mobs freeze, blocks take time to break) → run
/tpsor install a Spark/CPU profiler. Below 18 TPS = problem. - Network lag (high ping, rubberbanding) → run a traceroute. If ping spikes at a specific hop, it's the network, not the server.
- Chunk load lag (stutter when exploring) → disk speed or view-distance too high.
- Memory lag (crash with OutOfMemoryError) → GC pressure, insufficient RAM, or memory leak.
Install Spark and profile your server
spark profiler — let it run for 5 minutes while players are online. Spark will show you exactly which entities, tick phases, or plugins are consuming TPS. This single tool eliminates guesswork.
Use Aikar's JVM flags
Default JVM args are tuned for desktop apps, not Minecraft servers. Replace them with Aikar's optimized flags — these reduce garbage collection stutter by up to 70%.
Key changes: Use G1GC, set Xms equal to Xmx, enable AlwaysPreTouch. Our panel has a built-in Java flags tuner with these presets ready to go.
Switch to Paper or Purpur
Vanilla Minecraft server.jar is not optimized for performance. Paper (and its fork Purpur) include thousands of optimizations: chunk loading batching, redstone tick limits, entity activation ranges, and more. Most public servers use Paper. Your modpack almost certainly supports it.
Tune paper.yml — these 5 settings matter most
Open paper.yml in your server directory and adjust:
delay-chunk-unloads-by: 10s— keeps recently used chunks in memoryentity-activation-range: monsters 32, animals 24, misc 16— less CPU spent on far-away entitiesper-player-mob-spawns: true— spreads mob load across players instead of globallymax-entity-collisions: 2— prevents carpet-lag in large farmsredstone-implementation: ALTERNATIVE_CURRENT— reduces redstone tick cost
Lower view-distance and simulation-distance
Every chunk in view-distance costs CPU and RAM. Setting view-distance: 8 instead of 12 cuts chunk load overhead by roughly 40%. For simulation-distance, 6 is plenty for most servers — it controls how far from players mobs actually tick.
Use a proxy (Velocity) for server networks
If you run multiple game servers (lobby, survival, creative), put Velocity in front. A proxy handles player connections and routing, so your backend servers only deal with gameplay. It also protects your backend IP addresses from attacks.
Audit your plugins — one bad plugin can tank TPS
Plugins with inefficient SQL queries, repeating scheduler tasks, or heavy per-tick calculations can single-handedly destroy performance. Use /spark health to see CPU usage by plugin. Remove or replace the worst offenders.
Check your hardware — is your host the bottleneck?
If you've optimized everything software-side and still see TPS drops during peak hours, the hardware is the problem. Signs your host is overselling:
- TPS drops at the same time every day
- High CPU steal time (visible in
/neofetchor panel metrics) - Disk I/O latency spikes (NVMe vs SATA makes a visible difference)
Revitalize publishes real-time node load so you can see exactly how much headroom your node has before you buy.
Enable sleep-with-empty-map for SMP servers
Setting players-sleeping-percentage: 0 or using a sleep-vote plugin lets a single player skip the night. This prevents massive mob spawns from building up overnight, which causes morning lag spikes.
Monitor, measure, repeat
Performance tuning isn't a one-time task. Set up Spark profiling weekly and compare your TPS, MSPT, and memory graphs. Our Pulse monitoring gives you historical performance data so you can spot trends before they become outages.
If after all 10 steps your server still lags, the issue is almost certainly node overselling or CPU throttling at the host level. Revitalize doesn't oversell — every node is monitored for actual available headroom before a new server is deployed.
Need a host that doesn't fight your optimizations?
All-NVMe, Ryzen CPUs, no overselling, and Pulse monitoring so you can see exactly how your server is performing.
Try Revitalize Hosting →Frequently Asked Questions
How do I check my Minecraft server's TPS?
Run /tps in-game or install Spark (/spark tps). 20.0 is perfect, 18+ is fine, below 15 is unplayable.
Will more RAM fix my lag?
Only if you're hitting garbage collection limits. Check your memory usage graph first. If you're using 80%+ of allocated RAM, add more. If you're under 60%, RAM isn't your bottleneck — CPU or disk is.
Can plugins cause lag?
Absolutely. A single poorly-coded plugin with an inefficient loop in a onTick event can drop TPS by 50%. Always profile before blaming hardware.
Is Paper better than Fabric for performance?
Paper is optimized out of the box and works with Bukkit plugins. Fabric requires separate performance mods (Lithium, Sodium server-side) but can achieve similar results. For most servers, Paper is the easier choice.