How to Improve Minecraft Server Performance
Improving your Minecraft Server Performance
Looking for Minecraft hosting? Browse our available options! https://tempest.net/game-server!
This guide is meant to help you improve your server performance, for the best results we would recommend checking your server
performance using Spark plugin and configuring these settings to your needs.
Step 1 - Using High-Performance Server Software
Using Spigot or Bukkit builds in production is not recommended, as these builds are meant for development and testing purposes
and are not optimized for production use.
We would recommend using PaperMC or Purpur as it is the most optimized server software for Minecraft.
Step 2 - Updating Server Startup Flags
We would recommend applying these flags to your server startup script, these flags will improve server performance and stability.
Keep in mind that these JVM flags will reduce your server memory usage by 20% to increase JVM heap memory.
This step is highly recommended for large minecraft servers.
For 1.18.2 and above:
-XX:MaxRAMPercentage=80.0 --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20
For 1.17.1 and below:
-XX:MaxRAMPercentage=80.0 -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20
Step 3 - Adjusting Server Configuration
This guide is an example and we highly recommend adjusting these settings to your needs.
server.properties
• Go to File Manager and find a file called server.properties
view-distance
This depends on player count, if your server has less than 5 online players, we would recommend setting this to 7-8,
If your server has more than 5 online players, we would recommend setting this to 5-6.
simulation-distance
This setting should be always lower than view-distance
What is simulation distance? Simulation distance is a view distance but for entities.
This setting could be more demanding than view distance. This is why we recommend setting it to 4-5
We are done for server.properties configuration, of course there is more settings that you can adjust depending on your needs.
bukkit.yml
• Go to File Manager and find a file called bukkit.yml
spawn-limits
This setting is used to define how many of each entity can spawn in the world.
We would recommend reducing this since some entities like ambient (bats) do not need as high of a count as these defaults.
spawn-limits:
monsters: 20
animals: 10
water-animals: 3
water-ambient: 5
water-underground-creature: 3
axolotls: 3
ambient: 7
ticks-per
This setting controls entity spawning rate, for example monster-spawns has a default value of 1, setting it to 2 will spawn monsters 2x slower
We would recommend setting everything twice much as the default setting.
ticks-per:
animal-spawns: 400
monster-spawns: 2
water-spawns: 2
water-ambient-spawns: 2
water-underground-creature-spawns: 2
axolotl-spawns: 2
ambient-spawns: 2
autosave: 8000
spigot.yml
Now lets move on to spigot.yml configuration, this file is located in the same directory as bukkit.yml
save-user-cache-on-stop-only
This setting prevents player data from being saved constantly, while setting this to true will improve server performance, but it will also increase the chance of player data loss if the server crashes.
merge-radius
This setting controls how close items need to be to merge together, we would recommend setting this to 4.0 for items and 5.0 for exp.
merge-radius:
item: 4.0
exp: 5.0
item-despawn-rate
This setting controls how long items will stay on the ground before despawning the default value is 6000, we would recommend setting this to 3000.
item-despawn-rate: 6000
arrow-despawn-rate: 500
nerf-spawner-mobs
This setting disables spawner mobs AI, in some cases this will drastically improve server performance.
nerf-spawner-mobs: true
entity-activation-range
This setting controls how far away entities need to be to be activated, we would recommend setting this to 24 for monsters and 24 for animals.
entity-activation-range:
animals: 24
monsters: 24
raiders: 32
misc: 16
water: 16
villagers: 24
flying-monsters: 32
tick-inactive-villagers
This setting controls if villagers should tick if there is no player near it. We would highly recommend setting this to false.
tick-inactive-villagers: false
entity-tracking-range
This setting controls how far away entities need to be tracked by the server, we would recommend leaving 48 for players and setting 32 for animals and monsters, 32 for misc, 96 for display and 48 for other.
entity-tracking-range:
players: 48
animals: 32
monsters: 32
misc: 32
display: 96
other: 48
paper-world-defaults.yml
Now lets move on to paper-world-defaults.yml configuration, this file is located in /config directory.
anti-xray
Anti-xray prevents players from seeing ores through walls, this setting is resource demanding and would recommend enabling if needed.
anticheat:
anti-xray:
enabled: true
max-auto-save-chunks-per-tick
This setting controls how many chunks can be saved per tick, we would recommend setting this to 8 to avoid large lag spikes.
max-auto-save-chunks-per-tick: 8
prevent-moving-into-unloaded-chunks
This setting prevents players from moving into unloaded chunks, this setting prevents players from getting stuck or forcing server to load a chunk while its overloaded.
We would recommend enabling it.
prevent-moving-into-unloaded-chunks: true
fix-climbing-bypassing-cramming-rule
This setting prevents players from bypassing cramming rule by using a ladder, vine, etc. we would recommend enabling this.
fix-climbing-bypassing-cramming-rule: true
armor-stands.tick
This setting controls if armor stands should tick, while it almost has no impact to vanilla gameplay, it could allow attacker to crash your server by spawning lots of armor stands.
This is why we recommend setting this to false.
entities:
armor-stands:
do-collision-entity-lookups: true
tick: false
alt-item-despawn-rate
This setting controls how long defined items should stay on ground before despawning, we would recommend setting to these optimized values.
spawning:
all-chunks-are-slime-chunks: false
alt-item-despawn-rate:
enabled: true
items:
acacia_leaves: 200
andesite: 200
bamboo: 500
birch_leaves: 200
cactus: 500
cobblestone: 200
dark_oak_leaves: 200
diorite: 200
dirt: 200
granite: 200
grass: 200
gravel: 200
jungle_leaves: 200
kelp: 500
mangrove_leaves: 200
melon_slice: 500
netherrack: 200
oak_leaves: 200
pumpkin: 200
red_sand: 200
sand: 200
scaffolding: 200
spruce_leaves: 200
sugar_cane: 500
twisting_vines: 200
weeping_vines: 200
despawn-ranges
This setting controls how far away entities need to be from a player to be despawned, we would recommend setting to these optimized values.
despawn-ranges:
ambient:
hard: 56
soft: 32
axolotls:
hard: 56
soft: 32
creature:
hard: 56
soft: 32
misc:
hard: 56
soft: 32
monster:
hard: 56
soft: 32
underground_water_creature:
hard: 56
soft: 32
water_ambient:
hard: 56
soft: 32
water_creature:
hard: 56
soft: 32
environment.optimize-explosions
This setting instructs server to cache entity lookups during an explosion, rather than recalculating throughout the process.
This speeds up explosions significantly.
environment:
optimize-explosions: true
tick-rates
This setting controls how often should certain events happen, we would recommend setting to these optimized values.
We would recommend not increasing container-update value as this can lead to desync issues.
tick-rates:
behavior:
villager:
validatenearbypoi: -1
container-update: 1
grass-spread: 3
mob-spawner: 2
### Conclusion
This guide shoud've helped you improve your server performance and stability, it should also eliminate most of the "anti-lag" plugins.
If you have any questions, feel free to contact us on our Discord server.
Updated on: 15/05/2023
Thank you!