Since Mojang has released version 1.13, Minecraft Server performance has become worse with each version and running a Minecraft Server has gotten harder. This guide will show you how to properly optimise your server to make it run well.

Paper

Paper, a fork of Spigot, implements a lot of new configurable options that you can tweak for your servers performance. Below we will go into detail to what these settings do and what our recommended values are.

We understand that this is quite a long guide, however we really recommend you going through all this to properly optimise your server!

Still don't want to go through all these config files yourself? Lucky for you, we have a button our Panel that can do all of this for you with one click! Simply go to "General Settings" and hit "Optimize Server"!

paper.yml

max-auto-save-chunks-per-tick
Default: 24
Optimised: 6
Impact: Heavy
- This slows incremental chunk saving during the world save task. This is incredibly important for 1.13+ servers with how inefficient chunk saving is.

optimize-explosions
Default: false
Optimised: true
Impact: Minor
- Paper has a very efficient algorithm for explosions with no impact to gameplay.

mob-spawner-tick-rate
Default: 1
Optimised: 2
Impact: Minor
- This is the delay (in ticks) before an active spawner attempts spawns. Doubling the delay will not impact spawn rates. Only go higher if you have significant tick loss from ticking spawners.

disable-chest-cat-detection
Default: false
Optimised: true
Impact: Minor
- Chests scan for a cat on top of it when opened by a player. While enabling this eliminates vanilla behavior (cats block chests), do you really need this mechanic

container-update-tick-rate
Default: 1
Optimised: 3
Impact: Minor
- This changes how often (in ticks) inventories are refreshed while open. Do not exceed 4 to avoid visual issues.

max-entity-collisions
Default: 8
Optimised: 2
Impact: Medium
- Crammed entities (grinders, farms, etc.) will collide less and consume less TPS in the process.

grass-spread-tick-rate
Default: 1
Optimised: 4
Impact: Medium
- The time (in ticks) before the server tries to spread grass in chunks. This will have no gameplay impact on most game types.

despawn-ranges
Default: soft: 32, hard: 128
Optimised: soft: 28, hard: 96
Impact: Minor
- Lower ranges clear background mobs and allow more to be spawned in areas with player traffic. This further reduces the gameplay impact of reduced spawning (bukkit.yml).

Soft = The distance (in blocks) from a player where mobs will be periodically removed.
Hard = Distance where mobs are removed instantly.

hopper.disable-move-event
Default: false
Optimised: true
Impact: Heavy
- This will significantly reduce hopper lag by preventing InventoryMoveItemEvent being called for EVERY slot in a container.

Warning: If you have a plugin that listens to InventoryMoveItemEvent, do not enable.

non-player-arrow-despawn-rate
Default: -1 (uses Spigot arrow-despawn-rate)
Optimised: 60 (3 seconds)
Impact: Minor
- Similar to Spigot's arrow-despawn-rate, but targets skeleton-fired arrows. Since players cannot retrieve mob arrows, this is only a cosmetic change.

creative-arrow-despawn-rate
Default: -1 (Spigot arrow-despawn-rate)
Optimised: 60 (3 seconds)
Impact: Minor
- Like the setting above, but for player-fired arrows that cannot be retrieved (infinity bows).

prevent-moving-into-unloaded-chunks
Default: false
Optimised: true
Impact: Medium
- Prevents players from entering an unloaded chunk (due to lag), which causes more lag. The true setting will set them back to a safe location instead.

Note: If you did not pre-generate your world (what's wrong with you?!) this setting is critical.

use-faster-eigencraft-redstone
Default: false
Optimised: true
Impact: Heavy
- This setting reduces redundant redstone updates by as much as 95% without breaking vanilla devices. Empirical testing shows a speedup by as much as 10x!

Note: If you use a plugin to change redstone algorithms, consider replacing them with this option as plugins tend to break redstone behavior.

armor-stands-tick
Default: true
Optimised: false
Impact: Minor
- Some items are viewed as entities (require ticking) since they interact with the world. Unticked armor stands will not get pushed by water (do you care?)

Note: Paper also offsets item frame ticking instead of ticking all frames at once. This is not configurable, just enjoy the TPS savings with no gameplay impact.

per-player-mob-spawns
Default: false
Optimised: true
Impact: Minor
- This implements singleplayer spawning behavior instead of Bukkit's random algorithms. This prevents the actions of others (i.e. Massive farms) from impacting the server's spawn rates.

Note: If you lowered spawn-limits in Bukkit and notice shortages of animals and monsters, consider bumping those back up until you find a happy place.

alt-item-despawn-rate
Default: false
Optimised: true
Impact: Medium
- Remove certain item drops faster (or slower) than the item-despawn-rate set in Spigot. This lets you avoid dedicating resources to ticking massive piles of garbage.

anti-xray.enabled
Default: false
Optimised: true
Impact: N/A
- While this setting will actually cost TPS, Paper's anti-xray is the most efficient in existence! Engine 1 might be less heavy (mainly for clients), but mode 2 is by far more effective.

Note: Paper users with versions older than 1.12.2 should consider this plugin as an alternative.

spigot.yml

save-user-cache-on-stop-only
Default: false
Optimised: true
Impact: Medium
- Should the server constantly save user data (false) or delay that task until a stop/restart (true)? This is nice TPS savings on Spigot (less on Paper since it's more efficient).

Note: Take regular backups to avoid data loss in the rare event of a fatal crash.

max-tick-time
Default: tile:50, entity:50
Optimised: tile:1000, entity:1000
Impact: N/A
- The optimized value disables this feature. The small TPS savings is not worth the potential damage. Damage? (click here)

mob-spawn-range
Default: 8
Optimised: 6
Impact: N/A
- This sets the max mob spawn distance (in chunks) from players. After limiting spawns in Bukkit, this will condense mobs to mimic the appearance of normal rates.

Warning: If your view-distance is 6 or less, set a spawn range 1 below that value. For example, if view-distance is 5, set mob-spawn-range to 4.

entity-activation-range
Default: animals:32, monsters:32, raiders: 48, misc:16
Optimised: animals:16, monsters:24, raiders: 48, misc:8
Impact: Medium
- Entities past this range will be ticked less often. Avoid setting this too low or you might break mob behavior (mob aggro, raids, etc).

tick-inactive-villagers
Default: true
Optimised: false
Impact: Medium
- Enabling this prevents the server from ticking villagers outside the activation range. Villager tasks in 1.14+ are very heavy.

Note: The vanilla behavior would tick all villagers in loaded chunks.

merge-radius
Default: item:2.5, exp:3.0
Optimised: item:4.0, exp:6.0
Impact: Medium
- Merging items means less ground item ticking. Higher values allow more items to be swept into piles.

Note: Merging will lead to the illusion of items disappearing as they merge together. A minor annoyance.

nerf-spawner-mobs
Default: false
Optimised: true
Impact: Medium
- When enabled, mobs from spawners will not have AI (will not swim/attack/move). This is big TPS savings on servers with mob farms, but also messes with their behavior. A farm limiter plugin might be a better solution.

Note: Paper has an option to force nerfed mobs to jump/swim. This fixes water push farms and keeps the TPS savings.

item-despawn-rate
Default: 6000 (5 minutes)
Optimised: less?
Impact: Situational
- The time (in ticks) before a ground item is removed. While the TPS savings can be significant if reduced, it also impacts gameplay on servers where returning to dropped items is critical.

Note: See Paper's alt-item-despawn-rate so you can target trash items (cobblestone) without clearing valuable items (diamonds).

arrow-despawn-rate
Default: 1200
Optimised: 300
Impact: Minor
- Similar to item-despawn-rate, but for fired arrows. Some servers may want to keep arrows on the ground longer, but most will have no complaints from faster removal.

Note: Paper has settings to reduce the gameplay impact of arrow removal. Leave this near default if you use Paper's despawn options.

bukkit.yml

spawn-limits
Default: monsters:70, animals:10, water-animals:15, ambient:15
Optimised: monsters:50, animals:8, water-animals:3, ambient:1
Impact: Medium
- While there is more to this than "mobs per player" (explained in PDF), lower values mean less mobs. Avoid going too low or the mob shortages will be noticeable. Subsequent values in the guide will make the reduction less noticeable.

chunk-gc.period-in-ticks
Default: 600
Optimised: 400
Impact: Medium
- This unloads vacant chunks faster. Ticking fewer chunks means less TPS consumption.

ticks-per.monster-spawns
Default: 1
Optimised: 4
Impact: Medium
- This sets how often (in ticks) the server attempts to spawn a monster. Slighty increasing the time between spawns should not impact spawn rates.

Note: Only go higher if you have significant tick loss to the mobSpawn task.

autosave
Default: 6000 (usually)
Optimised: 6000
Impact: N/A
- This enables Bukkit's world saving and how often it runs (in ticks). It should be 6000 by default, just double check it is not 0 (disabled). This is a gradual/queued task (no lag?).