Si tu servidor de Minecraft tiene lag, baja TPS o crashea con muchos jugadores, esta guía te da las soluciones reales. Cubre desde los JVM flags de Aikar, configuración avanzada de Paper, Spigot y Bukkit, hasta límites de entidades y chunks. Con los ajustes de esta guía pasamos de 12 TPS a 19.8 TPS estables en producción con 60 jugadores y 30+ plugins activos.
No optimices a ciegas. Instala el profiler Spark (el mejor plugin gratuito de análisis de rendimiento para Paper/Spigot) y ejecuta:
/spark profiler start — inicia el profiler durante 2-3 minutos con jugadores activos/spark profiler stop — genera un reporte online con exactamente qué consume tu CPU/spark tps — muestra TPS actual y uso de RAM en tiempo real/spark health — resumen de estado general del servidorCon el reporte de Spark sabrás si el problema es un chunk, una entidad específica, un plugin mal programado o la JVM. Sin ese dato estás optimizando a ciegas.
Los flags de la JVM controlan cómo Java gestiona la memoria. Los flags de Aikar son la configuración más probada para servidores de Minecraft y se usan en producción en miles de servidores. Reemplazan el clásico -Xms -Xmx básico con una gestión del garbage collector mucho más eficiente.
java -Xms10G -Xmx10G \
-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 paper.jar nogui
java -Xms6G -Xmx6G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=4M \
-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 \
-jar paper.jar nogui
Regla de oro: pon -Xms y -Xmx al mismo valor para que Java no redimensione el heap en runtime (costoso). Si tienes 8 GB para el servidor, usa ambos a 8G.
El archivo bukkit.yml controla el spawn de mobs y algunos ciclos del servidor. Las opciones más importantes:
spawn-limits:
monsters: 50 # vanilla: 70 — reduce hasta 50 en servidores grandes
animals: 10 # vanilla: 10
water-animals: 5 # vanilla: 15
water-ambient: 2 # vanilla: 20
water-underground-creature: 3
ambient: 1 # murciélagos, útiles cero
chunk-gc:
period-in-ticks: 400 # descarga chunks sin jugadores
ticks-per:
animal-spawns: 400 # defaults 400, OK
monster-spawns: 5 # no bajar de 5 o mobs no spawnean bien
water-spawns: 11
water-ambient-spawns: 21
ambient-spawns: 21
autosave: 6000 # autosave cada 5 min (6000 ticks)
Spigot añade opciones cruciales de rendimiento sobre Bukkit. Estas son las que más impactan:
world-settings:
default:
view-distance: 6 # VANILLA es 10 — MAYOR causa el lag
simulation-distance: 4 # chunks que el servidor simula (independiente del view-distance)
mob-spawn-range: 6 # rango de spawn de mobs en chunks
entity-activation-range: # entidades fuera del rango "duermen"
animals: 32
monsters: 32
raiders: 48
misc: 16
water: 16
villagers: 32
flying-monsters: 32
tick-inactive-villagers: false # villagers fuera del rango = sin tick
merge-radius: # fusiona drops de items cercanos
item: 3.5
exp: 6.0
item-despawn-rate: 6000 # items en suelo: 5 min (vanilla: 6000, OK)
arrow-despawn-rate: 1200 # flechas: 1 min
nerf-spawner-mobs: true # mobs de spawners no tienen IA fuera del rango
Paper tiene el sistema de configuración más avanzado. Estos ajustes son los que más TPS recuperan:
chunks:
max-auto-save-chunks-per-tick: 6 # limita chunks que se guardan por tick
prevent-moving-into-unloaded-chunks: true
entities:
spawning:
all-chunks-are-slime-chunks: false
count-all-mobs-for-spawning: false
behavior:
allow-spider-world-border-climbing: false
door-breaking-difficulty:
husk: []
vindicator: []
zombie: []
zombies-target-turtle-eggs: false # evita que zombies busquen huevos de tortuga
misc:
fix-climbing-bypassing-cramming-rule: true
hopper:
cooldown-when-full: true # hoppers llenas no gastan tick
disable-move-event: true # GRAN mejora si tienes muchas hoppers
max-growth-per-random-tick: 1 # plantas no crecen varias veces en un tick
La view distance es la causa #1 de lag en servidores con muchos jugadores. Cada chunk a la vista = trabajo para el servidor.
view-distance: 8-10
simulation-distance: 6
Sin problemas con hardware decente.
view-distance: 6
simulation-distance: 4
Empieza a notarse la diferencia.
view-distance: 4-5
simulation-distance: 3-4
Imprescindible reducir aquí.
Instala el plugin View Distance Tweaks para ajustar la view distance automáticamente según la carga del servidor: sube cuando hay pocos jugadores, baja cuando hay muchos. Totalmente transparente para los jugadores.
Los mobs son el mayor consumidor de CPU en servidores survival. Controla cuántos pueden existir y en qué condiciones:
entities:
spawning:
per-player-mob-spawns: true # distribuye los mob caps por jugador (MUY RECOMENDADO)
spawn-limits:
monster: 35 # Paper default 70 — 35 suele ser suficiente
creature: 8
ambient: 1
axolotls: 3
underground_water_creature: 3
water_creature: 3
water_ambient: 5
Añade el plugin ClearLag o usa el comando integrado de Paper /paper mobcaps para ver en tiempo real cuántos mobs hay activos en cada mundo.
Un solo plugin mal programado puede consumir 30% de tu CPU. Usa Spark para identificarlo:
/spark profiler start --timeout 60PluginName → EventHandler → onEntitySpawn con 15%+, ese plugin es el culpableEl I/O de disco puede generar lag de TPS si el disco es lento o hay demasiada actividad de chunks:
/chunky start genera un radio de 3000 bloques en background sin lag perceptible. Evita que jugadores exploren chunks nuevos (I/O intensivo) en peak hours.server.properties: network-compression-threshold=256 (el valor por defecto 256 es razonable; reducirlo comprime más pero gasta CPU).# server.properties
view-distance=6
simulation-distance=4
network-compression-threshold=256
max-tick-time=60000 # evita que el watchdog mate el servidor en picos cortos
online-mode=true # no cambies esto sin razón
max-players=50 # ajusta a tu capacidad real
entity-broadcast-range-percentage=75 # reduce paquetes enviados a clientes
Instala un stack de monitorización para saber ANTES de que los jugadores se quejen:
/timings report genera análisis detalladoOliveerF Hosting entrega servidores Paper 1.21.11 con todos estos ajustes preconfigurados. Sin lag, sin configuración manual, listo en 2 minutos.
🎮 Ver planes de Hosting → 📄 Paper vs Spigot: ¿cuál usar?