You decide which services we may enable for analytics, personalization, and external content.
We use cookies and similar technologies on our website to personalize content, embed external media, and better understand how individual areas are used.
Necessary cookies
These entries support essential functions such as security, stability, and form processing.
Optional sections
AnalyticsMarketingPersonalizationExternal media
Your data may be processed with your consent or on the basis of legitimate interests. In the cookie settings, you can reject or explicitly allow each optional category.
Some services process personal data in third countries. By consenting, you also agree to this transfer. You can find more information in our Privacy Policy.
You can reopen and change your selection at any time. · 1.0.2
Learn how to optimize Minecraft game servers for better performance and smoother gameplay with effective configuration tips → Find out more
10 November 202621 min read0 Views0 helpful
What exactly happens during optimization?
Optimization is important for Minecraft game servers to run smoothly, and you should definitely take enough time for it on a public server. Only with plenty of time and testing can you achieve the best results. This guide is therefore not something you have to follow exactly, step by step; it is intended to help point you in the right direction.
In most cases, optimization involves changing many server settings, which can significantly change the server's behavior. Some settings are scaled back, for example, which reduces the load on the server and can improve performance. To avoid negatively affecting the overall player experience too much, you should always aim for a happy medium.
Vanilla
Unfortunately, there are very limited options for optimizing a Vanilla server, as there are only a few settings available. We can give the Vanilla server a little more power with the following measures:
View distance
A very common measure is to reduce the view distance. The default view distance is 10 chunks, but many players use considerably fewer, such as 6–8. Some players go overboard with the number of chunks and set it to 32, for example. This means the server has to load and process all those chunks, which takes a lot of performance.
On a Vanilla server, you can adjust the view distance in the server.properties config by changing the view-distance value. To avoid restricting the player experience too much, we recommend setting the value to 5–6, which can reduce the load on the server by up to 50%.
We already have an entry about this in our guide, which you can find here.
Data compression
A server and its connected players constantly exchange data. Players' movements are sent to the server, which then forwards them to all the other players. Player actions and events in the world, such as explosions, are also among the data that is continuously transferred.
To make this exchange more efficient, the size of the compressed data can be doubled, meaning the server only has to do 50% of the work to exchange the same data with players. To do this, adjust the network-compression-threshold value in the server.properties config. Set the value to 512. We also have an entry about this in our guide, which you can find here.
FAQ
Frequently asked questions
The default view distance is 10 chunks. Lowering view-distance to 5–6 in server.properties can reduce server load by up to 50% without significantly affecting gameplay.
This guide covers Vanilla, Forge, Bukkit, Spigot, and Paper Spigot. Paper Spigot offers the most additional settings, including spawn limits, entity activation ranges, mob spawners, and Redstone.
Vanilla has fewer configuration options than platforms such as Spigot or Paper Spigot, so optimization is mainly limited to view distance and data compression.
No. The guide is intended to help, not to provide a set recipe. Optimization can significantly change server behavior, so take time to test and find a balance between performance and gameplay.
Feedback
Was this article helpful?
Your feedback helps us prioritize and improve content.
0 of 0 Users found this article helpful.
Personal support
Need more help than the guide provides?
Our ZAP support team knows your product — briefly describe your issue and we'll help you personally.
Navigation
Minecraft
Forge
As with Vanilla, the options you can configure directly on the server are unfortunately somewhat limited, since only very small config files are available. However, you can install additional mods to reduce the load on the server.
Pre-generating chunks
One way to reduce the load on the server is to pre-generate chunks. When players are on the server later, it only has to load the saved chunk data instead of creating and generating the chunks from scratch. It's best to run this process overnight by starting it in the evening.
To do this, you need to install an additional mod. You can download a suitable mod here.
You can then install the mod on the server as usual, as described in our guides.
Before restarting the server, make sure that max-tick-time in server.properties is set to -1. Otherwise, the server might crash. We also recommend having at least 8–10 GB of RAM available, since the process uses a lot of RAM. You can temporarily increase the RAM overnight and reduce it again afterward.
Info
Note that the mod mentioned above may not be compatible with your Forge version, and the process may differ if you use another mod.
Once the server has started with the mod, open the console. We recommend setting a world border with a radius of 16,000 blocks. To do this, run the following commands in order:
worldborder center 0 0
worldborder set 16000
Info
If needed, replace the coordinates with the center of your own world to avoid your world being “cut off” (for example, if you have already built there).
Once the border is set, you can start pre-generating the chunks. Run the following command:
pregen gen startWorldBorder
All chunks within the border will now be pre-generated one after another. Depending on the number of installed mods, this can take up to 8 hours. Progress updates will appear regularly in the console. The console will also display a message when the process is complete!
Info
You can leave the mod installed on the server after the process is complete. It will continue optimizing chunks while the server is running, even when no players are online.
View distance
A very common measure is to reduce the view distance. The default view distance is 10 chunks, but many players use considerably fewer, such as 6–8. Some players go overboard with the number of chunks and set it to 32, for example. This means the server has to load and process all those chunks, which takes a lot of performance.
You can adjust a Forge server's view distance in the server.properties config by changing the view-distance value. To avoid restricting the player experience too much, we recommend setting the value to 5–6, which can reduce the load on the server by up to 50%.
We already have an entry about this in our guide, which you can find here.
Data compression
A server and its connected players constantly exchange data. Players' movements are sent to the server, which then forwards them to all the other players. Player actions and events in the world, such as explosions, are also among the data that is continuously transferred.
To make this exchange more efficient, the size of the compressed data can be doubled, meaning the server only has to do 50% of the work to exchange the same data with players. To do this, adjust the network-compression-threshold value in the server.properties config. Set the value to 512. We also have an entry about this in our guide, which you can find here.
Bukkit
View distance
A very common measure is to reduce the view distance. The default view distance is 10 chunks, but many players use considerably fewer, such as 6–8. Some players go overboard with the number of chunks and set it to 32, for example. This means the server has to load and process all those chunks, which takes a lot of performance.
You can adjust a Bukkit server's view distance in the server.properties config by changing the view-distance value. To avoid restricting the player experience too much, we recommend setting the value to 5–6, which can reduce the load on the server by up to 50%.
We already have an entry about this in our guide, which you can find here.
Data compression
A server and its connected players constantly exchange data. Players' movements are sent to the server, which then forwards them to all the other players. Player actions and events in the world, such as explosions, are also among the data that is continuously transferred.
To make this exchange more efficient, the size of the compressed data can be doubled, meaning the server only has to do 50% of the work to exchange the same data with players. To do this, adjust the network-compression-threshold value in the server.properties config. Set the value to 512. We also have an entry about this in our guide, which you can find here.
Spawn limits
This step slightly reduces the general mob spawn rates on the server. The change is barely noticeable compared to the default values. However, in some situations, such as at mob farms, the farm may not work as intended.
To adjust these settings, edit the bukkit.yml config. Change the following values under spawn-limits:
monsters: 50 #Default: 70
animals: 10 #Default: 15
water-animals: 3 #Default: 5
ambient: 4 #Default: 15
Info
You can adjust the values yourself if you want. Otherwise, the values above are a good average.
To further improve spawning, you should also change the monster-spawns value under ticks-per in bukkit.yml:
monster-spawns: 2 #Default: 1
If there is a general issue with monsters, for example one shown in the timing report, you can set the value as high as 5. Monitor the server's behavior at each value to find the best setting for your server.
Chunk processing
Minecraft uses what are called chunks. A chunk consists of 16x16 blocks that are combined to visually represent the world for the client. The server therefore works with chunks and loads the chunks it needs into RAM. The more chunks the server loads and processes continuously, the more resources it needs to provide, which can bring the server to its knees in some situations.
Servers with default settings never unload loaded chunks. This means RAM can be used very heavily in some situations, requiring a huge amount of it. Unfortunately, this significantly reduces server performance, as more and more has to be processed.
To make sure the server only loads the chunks it currently needs, you can adjust the following option under chunk-gc in bukkit.yml:
period-in-ticks: 300 #Default: 600
Info
The former additional load-threshold value is no longer present in current Paper/Spigot/Bukkit versions, and Paper already limits period-in-ticks server-side to a maximum of 20 ticks (1 second)—so a higher value has practically no effect on a Paper-based server (such as Paper Spigot).
The period-in-ticks option determines the intervals, in seconds, at which chunks are unloaded. You can reduce this value further if you wish, but be aware that this may cause an unwanted effect: a loop.
In a loop, a chunk would be unloaded even though it is needed again shortly afterward. This means the server has to spend more resources and time loading the chunk again. This would keep happening and put more strain on the server than leaving the chunks loaded for, say, another minute.
Spigot
View distance
A very common measure is to reduce the view distance. The default view distance is 10 chunks, but many players use considerably fewer, such as 6–8. Some players go overboard with the number of chunks and set it to 32, for example. This means the server has to load and process all those chunks, which takes a lot of performance.
On a Spigot server, you can adjust the view distance in the spigot.yml config by changing the view-distance value. To avoid restricting the player experience too much, we recommend setting the value to 5–6, which can reduce the load on the server by up to 50%.
Info
You can also set the value to 4, depending on your preference. This can be especially helpful for reducing lag on resource-world servers running version 1.13+.
Data compression
A server and its connected players constantly exchange data. Players' movements are sent to the server, which then forwards them to all the other players. Player actions and events in the world, such as explosions, are also among the data that is continuously transferred.
To make this exchange more efficient, the size of the compressed data can be doubled, meaning the server only has to do 50% of the work to exchange the same data with players. To do this, adjust the network-compression-threshold value in the server.properties config. Set the value to 512. We also have an entry about this in our guide, which you can find here.
Spawn limits
This step slightly reduces the general mob spawn rates on the server. The change is barely noticeable compared to the default values. However, in some situations, such as at mob farms, the farm may not work as intended.
To adjust these settings, edit the bukkit.yml config. Change the following values under spawn-limits:
monsters: 50 #Default: 70
animals: 10 #Default: 15
water-animals: 3 #Default: 5
ambient: 4 #Default: 15
Info
You can adjust the values yourself if you want. Otherwise, the values above are a good average.
To further improve spawning, you should also change the monster-spawns value under ticks-per in bukkit.yml:
monster-spawns: 2 #Default: 1
If there is a general issue with monsters, for example one shown in the timing report, you can set the value as high as 5. Monitor the server's behavior at each value to find the best setting for your server.
Chunk processing
Minecraft uses what are called chunks. A chunk consists of 16x16 blocks that are combined to visually represent the world for the client. The server therefore works with chunks and loads the chunks it needs into RAM. The more chunks the server loads and processes continuously, the more resources it needs to provide, which can bring the server to its knees in some situations.
Servers with default settings never unload loaded chunks. This means RAM can be used very heavily in some situations, requiring a huge amount of it. Unfortunately, this significantly reduces server performance, as more and more has to be processed.
To make sure the server only loads the chunks it currently needs, you can adjust the following option under chunk-gc in bukkit.yml:
period-in-ticks: 300 #Default: 600
Info
The former additional load-threshold value is no longer present in current Paper/Spigot/Bukkit versions, and Paper already limits period-in-ticks server-side to a maximum of 20 ticks (1 second)—so a higher value has practically no effect on a Paper-based server (such as Paper Spigot).
The period-in-ticks option determines the intervals, in seconds, at which chunks are unloaded. You can reduce this value further if you wish, but be aware that this may cause an unwanted effect: a loop.
In a loop, a chunk would be unloaded even though it is needed again shortly afterward. This means the server has to spend more resources and time loading the chunk again. This would keep happening and put more strain on the server than leaving the chunks loaded for, say, another minute.
Spawn range
Mobs can only spawn within certain distances of players. Here, we reduce that range slightly to avoid problems with mob spawning. This setting is very important because some of the spawn settings have already been covered above.
Change the following setting under world-settings in spigot.yml:
mob-spawn-range: 3 #Default: 4
Entity activation ranges
Here, we set when entities—that is, animals and monsters—are activated. This means animals can move, for example, or monsters can detect players. In general, this is enabled for all mobs, but they are in a kind of standby mode. In standby mode, mobs can still move and detect players, but, for example, they may do so very slowly, so the server doesn't need to provide as many resources.
You must also make these changes under entity-activation-range in spigot.yml. We recommend the following values:
animals: 6 #Default: 32
monsters: 16 #Default: 32
misc: 2 #Default: 16
water: 6 #Default: 6
tick-inactive-villagers: true #Default: true
Hopper optimizations
Hoppers are a very important part of Minecraft. But they are poison for servers! For every hopper placed, the server has to check 20 times per second whether there is an item ready to be picked up. Moving items from one hopper to another or into a chest also uses valuable resources!
To improve this, we increase the intervals at which the server performs these actions. With the values used here, the server will perform and check an action every 3 seconds. This does not change the transfer rates. However, Redstone clocks built with hoppers may no longer work correctly.
To make these changes, update the following values in spigot.yml:
hopper-transfer: 24 #Default: 8
hopper-check: 24 #Default: 8
hopper-amount: 3 #Default: 1
Collisions
Since Minecraft version 1.9, entities can collide, so, for example, players can no longer stand inside each other. Here, we set how often entities can generally collide. This can put a lot of strain on the server, especially in mob farms where many mobs are in a small area.
Change the following value in spigot.yml:
max-entity-collisions: 1 #Default: 8
Since collisions between mobs have no real effect, you can lower this value. This value does not apply to players, only to mobs!
Merge radius
The merge radius determines which items and XP are combined, reducing the number of entities the server has to process. Increasing this radius can have a positive effect for players, especially on servers where lots of items are on the ground. Here, too, you should find a good middle ground. Otherwise, a kind of lag effect can occur because the server has to check a larger area, which uses too many resources!
To adjust these settings, change the following values under merge-radius in spigot.yml:
item: 4.0 #Default: 2.5
exp: 6.0 #Default: 3.0
Info
The values should not be set higher than 8, or the lag effect mentioned above may occur!
Paper Spigot
Info
Since Paper 1.19, there is no longer a single paper.yml file. The former file has been split into several files in the config folder: paper-global.yml (server-wide settings) and paper-world-defaults.yml (default values for all worlds, which can be overridden per world in a separate paper-world.yml). bukkit.yml and spigot.yml are unaffected and continue to be used as before. Since Paper occasionally changes individual setting names and paths, if something differs, check the comments in the relevant config file or the official Paper documentation.
View distance
A very common measure is to reduce the view distance. The default view distance is 10 chunks, but many players use considerably fewer, such as 6–8. Some players go overboard with the number of chunks and set it to 32, for example. This means the server has to load and process all those chunks, which takes a lot of performance.
On a (Paper) Spigot server, you can adjust the view distance in the spigot.yml config by changing the view-distance value. To avoid restricting the player experience too much, we recommend setting the value to 5–6, which can reduce the load on the server by up to 50%.
Info
You can also set the value to 4, depending on your preference. This can be especially helpful for reducing lag on resource-world servers running version 1.13+.
Data compression
A server and its connected players constantly exchange data. Players' movements are sent to the server, which then forwards them to all the other players. Player actions and events in the world, such as explosions, are also among the data that is continuously transferred.
To make this exchange more efficient, the size of the compressed data can be doubled, meaning the server only has to do 50% of the work to exchange the same data with players. To do this, adjust the network-compression-threshold value in the server.properties config. Set the value to 512. We also have an entry about this in our guide, which you can find here.
Spawn limits
This step slightly reduces the general mob spawn rates on the server. The change is barely noticeable compared to the default values. However, in some situations, such as at mob farms, the farm may not work as intended.
To adjust these settings, edit the bukkit.yml config. Change the following values under spawn-limits:
monsters: 50 #Default: 70
animals: 10 #Default: 15
water-animals: 3 #Default: 5
ambient: 4 #Default: 15
Info
You can adjust the values yourself if you want. Otherwise, the values above are a good average. On a Paper Spigot server, you can also set the same values under entities.spawning.spawn-limits in paper-world-defaults.yml, where they will take precedence.
To further improve spawning, you should also change the monster-spawns value under ticks-per in bukkit.yml:
monster-spawns: 2 #Default: 1
If there is a general issue with monsters, for example one shown in the timing report, you can set the value as high as 5. Monitor the server's behavior at each value to find the best setting for your server.
Chunk processing
Minecraft uses what are called chunks. A chunk consists of 16x16 blocks that are combined to visually represent the world for the client. The server therefore works with chunks and loads the chunks it needs into RAM. The more chunks the server loads and processes continuously, the more resources it needs to provide, which can bring the server to its knees in some situations.
Servers with default settings never unload loaded chunks. This means RAM can be used very heavily in some situations, requiring a huge amount of it. Unfortunately, this significantly reduces server performance, as more and more has to be processed.
To make sure the server only loads the chunks it currently needs, you can adjust the following option under chunk-gc in bukkit.yml:
period-in-ticks: 300 #Default: 600
Info
The former additional load-threshold value is no longer present in current Paper/Spigot/Bukkit versions, and Paper already limits period-in-ticks server-side to a maximum of 20 ticks (1 second)—so a higher value has practically no effect on a Paper-based server (such as Paper Spigot).
The period-in-ticks option determines the intervals, in seconds, at which chunks are unloaded. You can reduce this value further if you wish, but be aware that this may cause an unwanted effect: a loop.
In a loop, a chunk would be unloaded even though it is needed again shortly afterward. This means the server has to spend more resources and time loading the chunk again. This would keep happening and put more strain on the server than leaving the chunks loaded for, say, another minute.
Spawn range
Mobs can only spawn within certain distances of players. Here, we reduce that range slightly to avoid problems with mob spawning. This setting is very important because some of the spawn settings have already been covered above.
Change the following setting under world-settings in spigot.yml:
mob-spawn-range: 3 #Default: 4
Mob spawners
Spawners are used very frequently on City Build servers, sometimes in large numbers. They keep spawning more and more mobs on the server, which can lead to many problems.
This option adjusts spawner behavior so that the server activates spawners at short intervals. To do this, change the following value under tick-rates in paper-world-defaults.yml:
mob-spawner: 3 #Default: 1
Info
The value used above does not change the behavior too much and has little impact on the player experience.
Entity activation ranges
Here, we set when entities—that is, animals and monsters—are activated. This means animals can move, for example, or monsters can detect players. In general, this is enabled for all mobs, but they are in a kind of standby mode. In standby mode, mobs can still move and detect players, but, for example, they may do so very slowly, so the server doesn't need to provide as many resources.
You must also make these changes under entity-activation-range in spigot.yml. We recommend the following values:
animals: 6 #Default: 32
monsters: 16 #Default: 32
misc: 2 #Default: 16
water: 6 #Default: 6
tick-inactive-villagers: true #Default: true
Hopper optimization
Hoppers are a very important part of Minecraft. But they are poison for servers! For every hopper placed, the server has to check 20 times per second whether there is an item ready to be picked up. Moving items from one hopper to another or into a chest also uses valuable resources!
To improve this, we increase the intervals at which the server performs these actions. With the values used here, the server will perform and check an action every 3 seconds. This does not change the transfer rates. However, Redstone clocks built with hoppers may no longer work correctly.
To make these changes, update the following values in spigot.yml:
hopper-transfer: 24 #Default: 8
hopper-check: 24 #Default: 8
hopper-amount: 3 #Default: 1
Collisions
Since Minecraft version 1.9, entities can collide, so, for example, players can no longer stand inside each other. Here, we set how often entities can generally collide. This can put a lot of strain on the server, especially in mob farms where many mobs are in a small area.
On a Paper Spigot server, this value is no longer in spigot.yml; it can be found under collisions in paper-world-defaults.yml:
max-entity-collisions: 1 #Default: 8
Since collisions between mobs have no real effect, you can lower this value. This value does not apply to players, only to mobs!
Merge radius
The merge radius determines which items and XP are combined, reducing the number of entities the server has to process. Increasing this radius can have a positive effect for players, especially on servers where lots of items are on the ground. Here, too, you should find a good middle ground. Otherwise, a kind of lag effect can occur because the server has to check a larger area, which uses too many resources!
To adjust these settings, change the following values under merge-radius in spigot.yml:
item: 4.0 #Default: 2.5
exp: 6.0 #Default: 3.0
Info
The values should not be set higher than 8, or the lag effect mentioned above may occur!
Explosions
Many parts of Minecraft game servers have been reprogrammed in Paper Spigot to help the server run better. This includes explosions! The software handles explosions more efficiently to help prevent severe lag on the server.
To do this, change the following value under environment in paper-world-defaults.yml:
optimize-explosions: true #Default: false
Chests
There is also a small optimization you can make for chests! If a cat is sitting on a chest, it can't be opened. To check this, the server has to go through all the mobs within a certain radius and see if one is sitting on the chest. Unfortunately, this takes a lot of time and happens every time a chest is opened!
You can disable this option under entities.behavior in paper-world-defaults.yml by making the following change:
disable-chest-cat-detection: true #Default: false
Inventories
Inventories are used a lot, but not all inventories are the same. A chest or crafting table is also an inventory, for example. With this change, you can give the server a little breather without anyone noticing! This setting simply determines how many ticks pass before the server updates each inventory.
To do this, change the following value under tick-rates in paper-world-defaults.yml:
container-update: 3 #Default: 1
Info
The value should not be set higher than 5, or the inventory may become a little buggy! In game modes such as SurvivalGames, where all players try to access the chests in the middle and grab the best items, don't change the value; leave it at 1.
Saving chunk data
When changes are made to a chunk, they are not written directly to disk; they are first loaded into RAM. However, all changes are saved very frequently, which can sometimes cause severe lag, especially when the server needs to save a lot of changes.
With this change, we reduce the maximum number of chunks that can be saved in a single save operation. This may use more RAM in some situations, since the changes remain in RAM for longer!
Make the following change under chunks in paper-world-defaults.yml:
max-auto-save-chunks-per-tick: 10 #Default: 24
Redstone
Redstone is often used to create circuits, some of which can be extremely large. On public servers, it is sometimes the weakest point for almost 90% of servers, as massive lag can be caused by Redstone. Here, we use an alternative Redstone implementation from Paper Spigot that makes Redstone almost harmless while retaining the same functionality as Vanilla!
To do this, make the following setting under misc in paper-world-defaults.yml:
Besides VANILLA, you can choose EIGENCRAFT and ALTERNATE_CURRENT—according to Paper, ALTERNATE_CURRENT is currently the fastest option and also differs least from Vanilla behavior.
Info
Caution! In some situations, this can significantly change how Redstone behaves!
Server hosting from €2.49 / month, online instantly, DDoS protection included.