Running a smooth multiplayer world means keeping your ticks per second locked at twenty, even when twenty players are active, automated farms are running, and chunks are loading fast. If you're tired of rubberbanding, entity stutter, and high CPU usage, you need a targeted server configuration plan that goes far beyond generic advice.
This guide covers real-world adjustments for server owners using modern server software like Paper, from tuning view distances and entity activation ranges to cleaning up idle tile entities and garbage collection flags.
Move Away from Vanilla Server Software
Vanilla Minecraft server software is notoriously inefficient. It calculates entity AI, tile ticks, and chunk updates on a single main thread without performance optimizations. If you're still running the default server.jar from Mojang, you're leaving massive amounts of performance on the table.
Switching to optimized server software is the single highest-impact change you can make. More journalism by Bloomberg explores similar perspectives on this issue.
- Paper: The industry standard for performance. It patches numerous vanilla bottlenecks, supports asynchronous chunk loading, and preserves 100% vanilla game mechanics.
- Purpur: A fork of Paper that offers even more configuration options, allowing you to tweak gameplay mechanics and performance limits precisely to your liking.
Transitioning takes minutes. Simply download the .jar file for your chosen software, place it in your server directory, and update your startup script to point to the new filename.
Tune server.properties and bukkit.yml
Your core configuration files control how hard your hardware has to work. Most default settings are designed for high-end single-player experiences rather than multi-player stability.
Start by adjusting view-distance and simulation-distance in your server.properties file. A default view distance of ten or twelve chunks forces the server to keep hundreds of chunks loaded per player. Lowering the view-distance to seven or eight and simulation-distance to six drastically cuts down CPU overhead. Players won't notice the difference in visual fog, but your CPU cores will breathe easier.
Next, open your bukkit.yml file and modify spawn limits:
- monsters: Set around 50 to 70.
- animals: Set around 10 to 15.
- water-animals: Set around 3 to 5.
Lowering these caps prevents mob farms from overwhelming the tick loop while keeping standard gameplay balanced.
Optimize paper.global.yml and paper-world-defaults.yml
If you use Paper or Purpur, the config/paper-global.yml and world-specific configuration files contain granular performance controls.
Adjust entity activation ranges to stop distant mobs from thinking. Mobs that are far away from players don't need to check their surroundings every tick. In your Paper world configuration, look for entity-activation-range and tweak the values for monsters, animals, and raiders. Dropping monster activation ranges slightly—such as from 32 down to 24 blocks—prevents lag spikes when large caves or mob farms are active.
You should also look at tick-rates. You don't need hoppers checking for items every single tick if you have thousands of them. Adjusting hopper check intervals or enabling item merging limits helps prevent container lag on technical servers.
Managing Entity and Item Clutter
Dropped items and excessive entity counts are silent killers of server performance. When players build massive item sorters or autofarms that break, thousands of entities pile up in unloaded or loaded chunks.
- Use plugins like ClearLagg or built-in Paper settings to remove uncollected dropped items after a set timeframe.
- Set entity cramming limits in your gamerules (
/gamerule maxEntityCramming 24) to prevent players from stacking hundreds of cows into a single one-by-one space. - Limit villager trading halls by spreading them out or encouraging players to use centralized trading hubs instead of dozens of isolated breeding pods.
Configure Garbage Collection Flags
Java garbage collection pauses can cause sudden, momentary freezes across your entire server. If you allocate too much RAM or use the default garbage collector, your server will stutter every few minutes as Java cleans up memory.
If you run Java 17 or later, use the Shenandoah or G1GC garbage collection flags in your startup script. For most servers with 4GB to 8GB of RAM, G1GC configured properly works wonders:
java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -jar server.jar nogui
Allocating too much RAM—like giving 16GB to a standard server—actually worsens garbage collection pauses because the cleanup cycles take longer to run through massive heaps. Match your RAM allocation to your actual player count and plugin load.
Frequently Asked Questions
How much RAM does a standard Minecraft server need?
For a vanilla or Paper server with up to ten players, 4GB to 6GB of RAM is usually plenty. Giving a server 12GB or 16GB of RAM without a massive modpack or heavy plugin list leads to longer garbage collection pauses and worse overall performance.
What causes TPS drops on Minecraft servers?
TPS drops are primarily caused by excessive entity calculations, large numbers of active redstone contraptions, too many loaded chunks, and slow disk read/write speeds. Using an SSD or NVMe drive is essential for modern server hosting.
Can plugins cause server lag?
Yes. Poorly coded plugins that run heavy tasks on the main server thread can tank your TPS instantly. Use internal profiling tools like /timings on Paper or Spark to identify which specific plugins or worlds consume the most CPU cycles.
Should I use pre-generation for my world?
Pre-generating your world chunks using a tool like Chunky prevents generation lag when players explore new areas. When players sprint across uncharted terrain, generating new terrain on the fly causes massive CPU spikes. Pre-generating solves this entirely.