
The best settings for a lag-free Minecraft server involve tuning view distance, simulation distance, entity activation ranges, mob spawn limits, and merge radius across your server.properties, spigot.yml, and paper-world-defaults.yml files. Combined with proper JVM flags, these changes can cut tick time in half without noticeably affecting gameplay.
Most server owners never touch these files beyond the basics. That's a mistake — the default values are designed for single-player, not multiplayer. Adjusting them for your actual player count and server type makes a massive difference in TPS.
Before You Start
Use Optimized Server Software
These settings assume you're running Paper or Purpur. Vanilla and Spigot don't expose most of the configuration options covered here. If you're still on Spigot or vanilla, switching to Paper is the single biggest performance upgrade you can make. See our Paper vs Spigot vs Fabric vs Forge comparison.
Benchmark First
Install Spark and run a profiler before making changes. This gives you a baseline to measure improvements against. Change settings in batches, restart, and compare — don't change everything at once.
Back Up Your Server
Before editing config files, make a full backup. A misconfigured setting can cause unexpected behavior that's hard to trace back to a specific change.
Server Properties
The main configuration file for every Minecraft server. These settings in server.properties have the broadest impact.
# Chunk render distance sent to clients
# Default: 10 | Recommended: 7-8
view-distance=8
# How far from players entities and blocks are actively ticked
# Default: 10 | Recommended: 4-6
simulation-distance=5
# Minimum packet size before compression (bytes)
# Default: 256 | Recommended: 512
network-compression-threshold=512
# Max milliseconds a tick can take before watchdog kills the server
# Default: 60000 | Recommended: 60000 (don't lower this)
max-tick-time=60000
# Blocks around spawn where non-ops can't build
# Default: 16 | Recommended: 0 (use WorldGuard instead)
spawn-protection=0
View distance vs simulation distance is the most important distinction here. View distance controls how far players can see — simulation distance controls how far the server actively processes entities and blocks. Keeping view distance moderate (7-8) while lowering simulation distance (4-6) gives players decent visibility without the server ticking unnecessary chunks.
Bukkit Configuration
Controls mob spawning rates and basic server behavior in bukkit.yml. Lower spawn limits reduce entity counts across the board.
spawn-limits:
monsters: 50 # Default: 70
animals: 8 # Default: 10
water-animals: 3 # Default: 5
water-ambient: 2 # Default: 20
water-underground-creature: 3 # Default: 5
axolotls: 3 # Default: 5
ambient: 1 # Default: 15
tick-per:
animal-spawns: 400 # Default: 400
monster-spawns: 1 # Default: 1
water-spawns: 1 # Default: 1
water-ambient-spawns: 1 # Default: 1
ambient-spawns: 1 # Default: 1
chunk-gc:
period-in-ticks: 400 # Default: 600
Key changes: Reducing monsters from 70 to 50 and ambient from 15 to 1 removes a significant number of entities without players noticing a major difference. Bats (ambient) contribute nothing to gameplay and cost real tick time. The chunk-gc period controls how often unloaded chunks are cleaned from memory — a lower value frees memory faster.
Spigot Configuration
Spigot's spigot.yml handles entity behavior, merging, and activation ranges.
world-settings:
default:
# Combine nearby dropped items into stacks
merge-radius:
item: 4.0 # Default: 2.5
exp: 6.0 # Default: 3.0
# How far from players mobs can spawn
mob-spawn-range: 6 # Default: 8
# Distance at which entities get full AI ticking
entity-activation-range:
animals: 16 # Default: 32
monsters: 24 # Default: 32
raiders: 48 # Default: 48
misc: 8 # Default: 16
# Ticks between hopper transfers
ticks-per:
hopper-transfer: 8 # Default: 8
hopper-check: 1 # Default: 1
# Maximum TNT detonations per tick
max-tnt-per-tick: 20 # Default: 100
Why these matter:
- merge-radius — Larger merge radius means fewer item entities on the ground. Items that would normally be 10 separate entities become 1 stack. This alone can save hundreds of entity ticks on busy servers.
- entity-activation-range — Entities outside this range get reduced AI processing. Lowering from 32 to 16-24 blocks means distant mobs don't waste CPU on pathfinding when no player is nearby.
- mob-spawn-range — Tighter spawn range concentrates mobs closer to players, reducing the total spawn volume.
- max-tnt-per-tick — Prevents TNT explosions from freezing the server. Lower values spread detonations across multiple ticks.
Paper World Defaults
Paper's paper-world-defaults.yml is where the most impactful performance settings live. These go beyond what Spigot offers.
entities:
behavior:
# Disable pillager patrols (optional, saves tick time)
pillager-patrols:
disable: false
spawn-chance: 0.2
spawn-delay:
per-player: true
ticks: 12000
spawning:
# How far from players mobs despawn
despawn-ranges:
monster:
hard: 96 # Default: 128
soft: 28 # Default: 32
creature:
hard: 96
soft: 28
misc:
hard: 64
soft: 28
# Per-player mob spawning (huge improvement for multiplayer)
per-player-mob-spawns: true # Default: true (keep enabled)
chunks:
# Chunks saved per autosave tick (spread I/O over time)
max-auto-save-chunks-per-tick: 8 # Default: 24
# Delay before newly unloaded chunks are eligible for removal
delay-chunk-unloads-by: 10s # Default: 10s
environment:
# Use alternate redstone algorithm (reduces updates by 95%)
redstone-implementation: ALTERNATE_CURRENT # Default: VANILLA
# Skip unnecessary explosion calculations
optimize-explosions: true # Default: false
# Disable treasure map searches (extremely expensive)
treasure-maps:
enabled: true
find-already-discovered:
loot-tables: default
villager-trade: true
# Disable ice/snow ticking in unused chunks
frosted-ice:
delay:
min: 20
max: 40
tick-rates:
# How often specific entities check behavior
behavior:
villager:
validatenearbypoi: 60 # Default: -1
sensor:
villager:
secondarypoisensor: 80 # Default: 40
Critical settings explained:
- redstone-implementation: ALTERNATE_CURRENT — This is the single most impactful setting for servers with redstone. The alternate algorithm produces the same results as vanilla but skips redundant block updates, reducing redstone tick time by up to 95%.
- optimize-explosions — Skips unnecessary raycasting during explosions. Noticeable improvement during Creeper spawns and TNT usage.
- despawn-ranges — Tighter despawn ranges mean fewer mobs exist at any time. Mobs far from players serve no purpose — despawning them sooner saves tick time.
- max-auto-save-chunks-per-tick — Lowering from 24 to 8 spreads disk writes across more ticks, preventing save-related lag spikes.
- Villager tick rates — Villagers checking for workstations and points of interest is notoriously expensive. Increasing these intervals reduces how often they run those checks.
Purpur Configuration
If you're running Purpur (a Paper fork with extra options), these additional purpur.yml settings help.
world-settings:
default:
mobs:
villager:
# Disable AI for villagers with a claimed POI
lobotomize:
enabled: true
check-interval: 100
# Brain tick rate (higher = less frequent AI updates)
brain-ticks: 2 # Default: 1
zombie:
# Aggressive toward villager scan rate
aggressive-towards-villager-when-lagging: false
Villager lobotomization disables AI for villagers that have a claimed workstation and bed. They still trade and breed but stop pathfinding and wandering — the most expensive parts of their AI. This is a game-changer for servers with large trading halls.
JVM Startup Flags
How you launch the server matters as much as what's inside the config files. The default Java flags leave significant performance on the table.
Aikar's Recommended Flags
These are the industry standard for Minecraft servers:
java -Xms6G -Xmx6G \
-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:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-jar server.jar nogui
Key points:
- Set
-Xmsand-Xmxto the same value — this prevents the JVM from constantly resizing the heap - G1GC (Garbage-First Garbage Collector) is optimized for Minecraft's memory patterns
- Adjust the memory value based on your server's needs — see our RAM guide for recommendations
Settings That Hurt Gameplay
Not every performance setting is worth enabling. Some save tick time but degrade the player experience enough to cause complaints.
Be careful with:
- Monster spawn limits below 30 — Survival becomes too easy when hostile mobs are rare. Find a balance between performance and challenge.
- Entity activation range too low — Mobs that don't move or react until you're practically on top of them break immersion. Keep monster activation at 24+ blocks.
- Disabling mob spawning categories entirely — Removing ambient or water mobs makes the world feel empty. Reduce counts instead of eliminating them.
The goal is a server that feels smooth and fun. A lag-free server that nobody wants to play on defeats the purpose.
Looking for hosting that's already optimized for performance? Check out Minecraft Server Hosting with tuned hardware and configuration built for smooth gameplay.
Frequently Asked Questions
What are the best server.properties settings for performance?
Set view-distance to 7-8, simulation-distance to 4-6, and network-compression-threshold to 512. These three changes alone reduce chunk processing and network overhead significantly.
Should I use Aikar's flags for my Minecraft server?
Yes. Aikar's JVM flags optimize garbage collection for Minecraft's specific memory usage patterns. They reduce lag spikes caused by GC pauses and are recommended for every server regardless of size.
What does simulation-distance do in Minecraft?
Simulation distance controls how far from each player the server actively ticks entities and blocks. Chunks within simulation distance get full processing — chunks outside it are loaded visually but not simulated. Lowering it reduces CPU usage substantially.
What is ALTERNATE_CURRENT redstone in Paper?
It's an optimized redstone algorithm that produces the same results as vanilla redstone but eliminates redundant block updates. It can reduce redstone-related tick time by up to 95%. Unless you're running a technical server that relies on quirky redstone behavior, enable it.
How do I reduce villager lag on my server?
Lower villager brain tick rates in paper-world-defaults.yml, increase the interval for POI validation, and if running Purpur, enable villager lobotomization. For plugin-based solutions, see our performance plugins guide.
Does lowering view distance reduce lag?
Yes, significantly. Each chunk within view distance must be loaded and sent to players. Reducing from 10 to 8 eliminates roughly 36% of loaded chunks per player. Combined with a lower simulation distance, this is one of the most effective changes you can make.
What's the difference between view distance and simulation distance?
View distance controls how far players can see — chunks are loaded and rendered but not fully processed. Simulation distance controls how far the server actively ticks entities, redstone, and block updates. You can have higher view distance with lower simulation distance to give players good visibility without the full processing cost.
How often should I change server settings?
Adjust settings when your TPS drops below 18-19 consistently. Use Spark to profile your server first, identify what's consuming the most tick time, then target those specific areas with config changes rather than changing everything blindly.

