Optimización del servidor Java
Esta guía documenta las opciones de configuración más importantes de Paper, Spigot y Bukkit para mejorar el rendimiento de tu servidor. Los valores aquí son recomendaciones equilibradas: maximizan el rendimiento sin romper las mecánicas de juego vanilla.
Requisito previo
Esta guía asume que ya tienes Paper (o Purpur) instalado. Si usas Vanilla o Spigot puro, muchas de estas opciones no estarán disponibles.
server.properties
# === RENDIMIENTO ===
# Cuántos chunks alrededor del jugador se cargan y envían (visual)
# Reducir mejora mucho el rendimiento. 8-10 es un buen equilibrio.
view-distance=8
# Cuántos chunks se simulan (entidades, redstone, physics)
# Debe ser <= view-distance. 6 es un buen punto de partida.
simulation-distance=6
# === SPAWN ===
# Rango de spawn en bloques alrededor del punto de spawn del mundo
# Reducirlo evita cargar chunks innecesarios al inicio
spawn-protection=16
# === RED ===
# Máximo de jugadores simultáneos
max-players=20
# Cuántos paquetes de movimiento por tick acepta el servidor
# Aumentar reduce el rubber-band en conexiones lentas
network-compression-threshold=256
bukkit.yml
settings:
# Con cuántos ticks de retraso se procesa cada chunk (0 = inmediato)
# Aumentar a 1 puede suavizar la carga en servidores ocupados
chunk-gc:
period-in-ticks: 600
spawn-limits:
# Máximo de mobs por mundo. Reducir = menos CPU.
# Valores equilibrados para 20-40 jugadores:
monsters: 50
animals: 8
water-animals: 3
water-ambient: 10
ambient: 4
chunk-gc:
period-in-ticks: 600
ticks-per:
# Cada cuántos ticks intenta spawnear mobs de cada categoría
# Aumentar = menos spawns = menos lag. El valor vanilla es 1.
animal-spawns: 400
monster-spawns: 1
water-spawns: 1
water-ambient-spawns: 1
ambient-spawns: 1
autosave: 6000
spigot.yml
settings:
# Cuántos bytes se comprimen los paquetes de red
# 256 es un buen balance entre CPU y ancho de banda
netty-threads: 4
# Desactiva los bungee si no usas proxy
bungeecord: false
world-settings:
default:
# === ENTIDADES ===
# Distancia en bloques a la que se activan las entidades (IA completa)
# Reducir = menos carga de IA en entidades lejanas
entity-activation-range:
animals: 16
monsters: 24
raiders: 48
misc: 8
water: 8
villagers: 16
flying-monsters: 32
# Distancia en bloques hasta la que el servidor trackea entidades
entity-tracking-range:
players: 48
animals: 48
monsters: 48
misc: 32
other: 64
# Desactiva el tick de IA de los villagers cuando están muy lejos
# Recomendado: true (los villagers solo se activan cuando alguien está cerca)
tick-inactive-villagers: false
# === ITEMS EN EL SUELO ===
# Radio de fusión de items y experiencia en el suelo
# Menos entidades = mejor rendimiento
merge-radius:
item: 3.5
exp: 6.0
# === MOBS ===
# Rango máximo en el que pueden spawnear mobs respecto al jugador (en chunks)
mob-spawn-range: 6
# === FLECHAS ===
# Cuántas flechas en el suelo se conservan antes de desaparecer
max-tick-time:
tile: 50
entity: 50
# === HOPPER ===
# Cada cuántos ticks un hopper puede transferir un item
# 8 es el vanilla, aumentar reduce la carga pero ralentiza los hoppers
hopper-transfer: 8
hopper-check: 1
paper-global.yml
# === CHUNK LOADING ===
chunk-loading-basic:
# Configura automáticamente la distancia de envío según la velocidad del cliente
autoconfig-send-distance: true
# Máximo de chunks que se cargan por tick al generar terreno
target-player-chunk-send-rate: 100.0
chunk-loading-advanced:
# Máximo de cargas de chunk concurrentes por jugador
player-max-concurrent-loads: 4.0
# Máximo de cargas de chunk concurrentes en todo el servidor
server-max-concurrent-loads: 4.0
# === ANTICHEAT ===
anticheat:
anti-xray:
# Desactiva si no lo necesitas: consume CPU significativamente
enabled: false
# === ASYNC CHAT ===
# Procesa los mensajes de chat de forma asíncrona
async-chat-executor-size: 4
# === TIMINGS ===
timings:
enabled: true
verbose: true
# En producción, reducir para ahorrar CPU
history-interval: 300
history-length: 3600
paper-world-defaults.yml
# === ENTIDADES ===
entities:
spawning:
# Corrige UUIDs duplicados en vez de eliminar entidades
duplicate-uuid:
mode: SAFE_REGEN
safe-regen-delete-range: 32
# Desactiva creepers y fantasmas que aparecen en lugares incorrectos
filtered-entity-tag-nbt-path-length: 64
behavior:
# Los villagers dejan de pathfind cuando nadie está cerca
# Ahorra mucho CPU en servidores con muchos NPCs
villager-work-immunity-after: 100
villager-work-immunity-for: 20
villager-active-for-panic: true
# === CHUNKS ===
chunks:
# Cada cuántos ticks se guarda el mundo en disco
auto-save-interval: 6000
# Cuántos chunks se descargan por tick al limpiar
max-auto-save-chunks-per-tick: 24
# === ENVIRONMENT ===
environment:
# Optimiza el cálculo de explosiones (TNT, creepers)
optimize-explosions: true
# Evita que el nether tenga más portales de los necesarios
nether-ceiling-void-damage-height: 128
# === REDSTONE ===
misc:
# Motor de redstone alternativo con mejor rendimiento
# ALTERNATE_CURRENT es compatible con la mayoría de circuitos
redstone-implementation: ALTERNATE_CURRENT
# Cuántos items en el suelo se fusionan por tick
update-pathfinding-on-block-update: false
Checklist de optimización rápida
Antes de abrir el servidor, verifica que has hecho:
- Configurar las Flags de Aikar
- Reducir
view-distancea 8 o menos - Reducir
simulation-distancea 6 o menos - Bajar
spawn-limitsenbukkit.yml - Activar
tick-inactive-villagers: falseenspigot.yml - Pregenerar el mapa con Chunky (radio 3000-5000 bloques)
- Instalar Spark para monitorizar el rendimiento
Recursos adicionales
- 📖 YouHaveTrouble/minecraft-optimization — guía de referencia comunitaria muy completa
- 📖 Documentación oficial de Paper
- 💬 Discord de MixelNodes