1 May 2026

Minecraft Server Configuration Guide

A comprehensive guide to configuring your Minecraft server, including server.properties settings, JVM flags, and performance optimisation techniques.

Brauchst du einen Minecraft-Server?Jetzt mieten

Properly configuring your Minecraft server makes a huge difference – the gap between a default setup and a tuned one is night and day. This guide covers the important stuff in server.properties, JVM flags that actually matter, and Paper-specific tweaks that'll keep your server running smoothly.

If you haven't set up your server yet, go through our Getting Started Guide first – it'll walk you through picking a server type and getting things running.

Understanding server.properties

The server.properties file is where most of your core settings live. You can edit it through Configuration Files in the TCAdmin panel at control.low.ms, or browse to it manually via File Manager. After making changes, restart your server for them to take effect.

Essential Settings

These are the basics you'll want to set up first:

# Server display name in the multiplayer list
motd=A LOW.MS Minecraft Server

# Game settings
gamemode=survival
difficulty=normal
pvp=true
hardcore=false
allow-nether=true

# Player limits
max-players=20
white-list=false

# World settings
level-name=world
level-seed=
level-type=minecraft\:normal
spawn-protection=16

One thing that trips people up: level-type used to accept default in older versions, but modern Minecraft expects the namespaced minecraft:normal format. If you're seeing weird world generation, check this first.

Performance-Critical Settings

These have the biggest impact on how your server feels to play on:

# View distance — chunks loaded around each player
# Lower = dramatically better performance
# Default: 10, I'd recommend 6-8 for most servers
view-distance=6

# Simulation distance — chunks with active entities around each player
# Reducing this helps a lot with entity processing overhead
# Default: 10, try 4-6
simulation-distance=4

# Network compression — minimum packet size before compression kicks in
# Higher values trade bandwidth for CPU savings
# Default: 256, 256-512 is fine
network-compression-threshold=256

# Entity broadcast range — percentage of view distance for entity updates
# Lowering this reduces bandwidth and processing
# Default: 100, 80 works well
entity-broadcast-range-percentage=80

I'd recommend setting view-distance to 6 on most servers – it's the single biggest performance lever you have in this file. Players rarely notice the difference from 10, but your TPS will thank you.

Security Settings

# Only authenticated players can join
online-mode=true

# Query protocol for server lists (disable unless you need it)
enable-query=false

# RCON — disable unless you specifically use it
enable-rcon=false

# Rate limiting
rate-limit=0

# Disable if you're running behind Velocity or another proxy
prevent-proxy-connections=false

JVM Flags and Memory Allocation

JVM flags control how Minecraft uses memory and handles garbage collection. Getting these right can eliminate most lag spikes – you'd be surprised how often bad GC tuning is the real cause of "server lag."

Java Version

You'll need Java 21 for most Minecraft versions. If you're running Minecraft 26.1+, you'll need Java 25 instead – it's a hard requirement from Mojang.

Aikar's flags are what most serious server admins use. They tune the G1 garbage collector specifically for Minecraft's memory patterns – lots of short-lived objects, periodic chunk saves, that sort of thing.

For servers with 12 GB or less RAM:

java -Xms{RAM}M -Xmx{RAM}M -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 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui

For servers with more than 12 GB RAM, adjust these two values:

-XX:G1NewSizePercent=40
-XX:G1MaxNewSizePercent=50

Note on Java 25: These flags are designed for Java 21. If you're running Minecraft 26.1+ (which needs Java 25), check the PaperMC docs for updated recommendations – the G1GC tuning may need adjusting for newer JVMs.

Key Points About Memory

  • Always set -Xms and -Xmx to the same value. This prevents Java from constantly resizing the heap, which causes unnecessary GC overhead.
  • Don't over-allocate. Giving your server more RAM than it actually uses leads to longer garbage collection pauses. For most servers, 10–12 GB is the practical ceiling before you hit diminishing returns.
  • The -Dusing.aikars.flags and -Daikars.new.flags properties are tracking flags – they tell plugins and diagnostics tools which flag set you're using. They don't change behaviour, but some tools check for them.

Common Flags Reference

Flag Purpose
-Xms / -Xmx Minimum and maximum heap size
-XX:+UseG1GC Use the G1 garbage collector (best for Minecraft)
-XX:MaxGCPauseMillis=200 Target maximum GC pause time
-XX:+AlwaysPreTouch Pre-allocate memory pages at startup
-XX:G1HeapRegionSize=8M Size of G1 heap regions
-XX:G1NewSizePercent Minimum percentage of heap for young generation

Paper-Specific Configuration

If you're running Paper (which I'd recommend for most servers), you get access to extra config files with much finer control over performance. Edit these through Configuration Files in the TCAdmin panel at control.low.ms.

paper-global.yml

chunk-system:
  gen-parallelism: default  # Uses all available CPU cores for chunk generation
  io-threads: -1            # Auto-detect I/O thread count

packet-limiter:
  all-packets:
    max-packet-rate: 500.0  # Prevent packet spam

paper-world-defaults.yml

These apply to all worlds unless you override them per-world:

chunks:
  auto-save-interval: default   # Delegates to bukkit.yml (typically 6000 ticks / 5 minutes)
  max-auto-save-chunks-per-tick: 24

environment:
  optimize-explosions: false    # Set to true on busy servers — skips some explosion ray calculations
  treasure-maps:
    enabled: true
    find-already-discovered:
      loot-tables: default
      villager-trade: false     # Prevents lag from repeated treasure map searches

A few notes on these: auto-save-interval: default delegates to bukkit.yml (typically 6000 ticks, which is 5 minutes), and that's fine for most servers – no need to change it unless you have a specific reason. For optimize-explosions, the default is false; set it to true if you're running a busy server with lots of TNT or creepers, since it skips some explosion ray calculations to save CPU time.

You might notice the old guides mention monster-spawn-range in this file – that key doesn't exist in Paper config. The equivalent is mob-spawn-range in spigot.yml, which is a different file. This one trips people up a lot.

GeyserMC Setup for Bedrock Crossplay

GeyserMC lets Bedrock Edition players connect to your Java server. Here's how to set it up:

  1. Download GeyserMC for your server type (Paper/Spigot plugin or Fabric/Forge mod) from geysermc.org.
  2. Upload the plugin/mod to your server's plugins or mods folder using File Manager in the TCAdmin panel at control.low.ms.
  3. Restart your server to generate the config files.
  4. Edit plugins/Geyser-Spigot/config.yml via Configuration Files:
    bedrock:
      port: 19132  # Default Bedrock port
      motd1: "My Server"
    remote:
      address: auto
      port: auto
      auth-type: online  # Requires Microsoft account
    
  5. Optionally install Floodgate – it lets Bedrock players join without needing a Java account, which is honestly what most people want.

Bedrock players connect using your server's IP and port 19132 (or whatever you set the Bedrock port to).

World Management

Pre-generating Chunks

Pre-generating your world is one of the best things you can do for performance. When players explore new areas on an un-pregenerated world, the server has to generate chunks on the fly, which tanks TPS. The Chunky plugin handles this:

  1. Install Chunky from SpigotMC.
  2. Set the radius: /chunky radius 5000
  3. Start generation: /chunky start
  4. Check progress: /chunky progress

In my experience, pre-generating a 5000-block radius takes a while but it's absolutely worth it. Do it before you open the server to players if you can.

World Borders

Setting a world border prevents infinite exploration, saving disk space and reducing chunk generation lag:

/worldborder center 0 0
/worldborder set 10000

I'd pair this with Chunky – pre-generate everything inside the border and you'll never see chunk-generation lag again.

Monitoring Server Performance

TPS (Ticks Per Second)

A healthy server runs at 20 TPS. Use /tps (available on Paper/Spigot) to check where you stand:

  • 20 TPS – perfect, no lag
  • 18–19 TPS – good, minor load
  • 15–17 TPS – noticeable lag, worth investigating
  • Below 15 – significant lag, time to optimise

Spark Profiler

When TPS drops and you're not sure why, install the Spark plugin. Run /spark profiler start, play for a few minutes, then /spark profiler stop to get a detailed breakdown of what's eating your server's resources. It's honestly the fastest way to diagnose performance issues.

If you run into problems with any of this, check our Troubleshooting Guide – it covers the most common issues we see. And if you're still shopping for a server, take a look at our Minecraft hosting plans. Our support team is around 24/7 if you need a hand.

Join our Discord to chat with our staff and community!
Join Discord