Minecraft servers need fast internet to function well. If you’re stuck with slow internet due to cost or availability there are some steps you can take to optimize your server. Here I’ll talk about what I’ve done to run a small MC server on an upload speed of just a few megabits-per-second.

Internet speed comes in two varieties: Download and upload. Sometimes these speeds are about the same. It is more common though to have a higher download speed. This is usually because of infrastructure limits, and because consumers require fast download speed more than fast upload. Unfortunately it isn’t always possible to upgrade your upload speed. My own internet plan is 30mbps down / 3mbps up. You can test your own plan here.

Upload speed is generally more important than download. It’s difficult to know just how much upload speed you’ll need. I’ve seen people say you need 30kpbs per user to 300kbps or more. This number varies so much because there are a lot of factors to consider, like the game version, server framework, and server settings.


Server Framework

The official Minecraft server framework is a bit lackluster. It doesn’t support custom plugins, has fewer options and is less performant than some other frameworks. I highly recommend PaperMC which has unparalleled performance, and is exactly what we want here. There is also Spigot, a more performant version of Bukkit, which is itself is more featured than vanilla. Any of these three options will allow you to further customize your server and add plugins.


Render Distance

Perhaps the most relevant factor here is the render distance setting. This is a configuration option that dictates how many chunks around players the server is allowed to send out. This is different from and takes priority over the client-side view distance option. The lower the value, the less chunks are loaded around players, which means bandwidth saved. The method for changing this value varies depending on how your server is set up.

For a vanilla or Bukkit server, in server.properties: view-distance=[3-32]

For a Spigot server, in spigot.yml: view-distance=[3-32]

For a Paper server, in paper.yml: view-distance=[3-32]

If you’d like to maximize view distance you might install View Distance Tweaks. This plugin allows the server to dynamically change the view distance depending on how many chunks are loaded. You could set it up so that if only one person is playing the max amount of view distance is set whereas if ten players are on it is at minimum. It takes a bit of tweaking to get right but is well worth it.


Compression

Minecraft servers compress the packets of data sent to players. By default only larger files are compressed, while smaller files are sent through normally. There is a configuration file we can edit to change this:

In server.properties: compression-threshold=[0-65535, -1 to disable]

By default this is set to 256, which means that anything over 256 bytes will be compressed. I have mine set to 64, which is the minimum recommended by the Wiki: The Ethernet spec requires that packets less than 64 bytes become padded to 64 bytes. Thus, setting a value lower than 64 may not be beneficial. It is also not recommended to exceed the MTU, typically 1500 bytes.” Note that this comes with a tradeoff – Compressing more packets will use more CPU power.


Limit Travel

If your server uses the EssentialsX plugin your players may have access to homes and warps which allow them to travel instantly by entering a command. If this is used frequently the server will have to send way more chunk data than usual. In the configuration file you might change:

  • Who has access to homes or warps
  • How many homes or warps they are allowed to create
  • If there is a fee to use them
  • How often they are allowed to use them in seconds

One drastic option is to disable elytra. You might choose to do this if players are constantly exploring and generating/reloading chunks too fast.


Remove or Disable Plugins

Some plugins use a considerable amount of bandwidth to operate. Dynmap for instance, a plugin that generates a map viewable in your browser, acts as a webserver and requires as much bandwidth as it takes to serve the images for the map. Here you might consider reducing the quality of the images, or moving the fileserver to a separate machine with more bandwidth available.

It is difficult to gauge how much bandwidth is being used by plugins, though if you find that you aren’t using some it may be best to remove or disable them.


General Performance Tweaks

Here are some general performance tweaks that may help squeeze a bit more performance out of your server:


Hopefully this all helps. It can be a difficult problem to tackle as every server is different and there will rarely be a consistent bandwidth demand. That said, understanding the issue and making relevant changes worked for me and I hope it works for you, too.

If you liked this article, maybe check out one of my others where I run a Minecraft server on the tiny Raspberry Pi Zero single-board-computer.

Leave a comment