¿Cómo soluciono el lag del servidor con el perfilador Spark?
En este artículo
Tu servidor va a tirones: los bloques reaparecen después de romperlos, los mobs se congelan, los comandos responden tarde y en la consola aparece Can't keep up! Is the server overloaded?. No hace falta adivinar qué granja o qué plugin tiene la culpa: el perfilador gratuito Spark mide con exactitud dónde pierde el tiempo cada tick. En esta guía instalarás Spark, capturarás un perfil mientras ocurre el lag y convertirás el informe en una solución concreta.
Primero, entender: TPS, MSPT y «Can't keep up»
Un servidor de Minecraft funciona a 20 ticks por segundo (TPS). En cada tick el servidor actualiza el mundo entero y dispone de un máximo de 50 milisegundos para hacerlo. El MSPT (milliseconds per tick) indica cuánto dura realmente un tick. Mientras el MSPT se mantenga por debajo de 50, el servidor alcanza sin problemas los 20 TPS; en cuanto lo supera, los TPS caen y literalmente todo el servidor se ralentiza.
El mensaje Can't keep up! Is the server overloaded? Running 2000ms or 40 ticks behind significa exactamente eso: los ticks tardaron demasiado, el servidor va con retraso y se salta ticks para recuperarlo. Verlo una vez durante el arranque es inofensivo; si reaparece mientras se juega, tienes lag de servidor de verdad.
Comprueba primero que el problema está realmente en el servidor. Unos FPS bajos o una imagen a tirones (sobre todo con shaders) es lag de cliente; el rubberbanding con un ping alto es lag de conexión. Escribe /spark tps: si muestra 20 TPS estables con un MSPT bajo, busca la causa en el cliente o en la red.
Paso 1: Instala Spark
- ¿Usas Paper o Purpur 1.21 o más reciente? Entonces Spark ya viene integrado. Escribe
spark tpsen la pestaña Console del panel de MC-Node; si obtienes respuesta, pasa directamente al paso 2. - Si no, descarga Spark desde spark.lucko.me/download. Elige la versión Bukkit para Paper/Spigot, o la versión Fabric/Forge/NeoForge para un servidor con mods.
- Abre la pestaña Files del panel y sube el jar a la carpeta
plugins(en un servidor con mods:mods). - Reinicia el servidor desde la pestaña Console y comprueba con
spark tpsque el comando funciona.
Paso 2: Perfila mientras ocurre el lag
El mayor error: perfilar un servidor vacío o recién reiniciado. Sin jugadores conectados, las granjas, hoppers y chunks que causan el lag no están funcionando, así que el informe no mostrará nada. Inicia el perfilador justo cuando el lag se produce de verdad, con jugadores dentro.
- Espera a que aparezca el lag o pide a los jugadores que reproduzcan la situación (por ejemplo, junto a la granja sospechosa).
- Escribe en la consola:
spark profiler start --timeout 300. El perfilador mide durante 5 minutos y se detiene solo. Sin--timeout, detenlo tú mismo conspark profiler stop. - Deja que todos sigan jugando con normalidad; la medición apenas consume rendimiento.
- Al terminar, la consola imprime un enlace a
spark.lucko.me. Ábrelo en tu navegador.
Paso 3: Lee el informe
- Arriba verás los TPS y el MSPT durante la medición: así confirmas que de verdad capturaste el lag.
- Abre el árbol bajo el hilo del servidor y ve desplegando cada vez la fila con el porcentaje más alto. Así desciendes hasta la tarea que devora la mayor parte del tiempo de tick.
- Reconoce los patrones: mucho tiempo en
entityTicko en la IA de los mobs apunta a demasiadas entidades;HopperBlockEntity, a líneas de hoppers;chunk generationoServerChunkCache, a la carga de chunks; y un nombre de paquete tipocom.ejemplo.nombredelpluginseñala a ese plugin concreto como culpable.
Causas habituales y su solución
- Demasiadas entidades — Normalmente granjas de mobs u objetos tirados por el suelo. Configura
/gamerule maxEntityCramming 8(por defecto 24), baja losspawn-limitsenbukkit.ymly elentity-activation-rangeenspigot.yml, y añade un interruptor de encendido/apagado a las granjas grandes. - Hoppers — Las líneas largas de hoppers comprueban su contenido en cada tick. Sube en
bukkit.ymlel valorticks-per.hopper-transfer(por ejemplo de 8 a 16) y, en Paper, pon la opciónhopper.cooldown-when-fullentruedentro deconfig/paper-world-defaults.yml. Sustituye las líneas larguísimas por corrientes de agua con menos hoppers. - Carga de chunks y generación del mundo — Los jugadores que exploran obligan al servidor a generar chunks nuevos. Baja la
simulation-distanceenserver.properties(por ejemplo a 6) y, si hace falta, laview-distance, establece un borde del mundo y pregenera el mundo con el plugin Chunky:/chunky radius 3000seguido de/chunky start. - Un plugin en lo alto del informe — Actualiza primero el plugin, desactiva las funciones pesadas (escaneos, animaciones, hologramas) en su config o busca una alternativa más ligera. Puedes probarlo moviendo temporalmente el jar fuera de
pluginsy reiniciando. - «Can't keep up» solo al arrancar — Inofensivo: el servidor está recuperando el pico del arranque. Solo actúa si el mensaje vuelve durante la partida.
- Los TPS están a 20 pero los jugadores se siguen quejando — Entonces es lag de cliente o de red: reduce la distancia de renderizado o desactiva los shaders en el cliente, o revisa el ping.
Sigue optimizando
¿Usabas /timings antes? Nuestro artículo sobre cómo crear timings está anticuado; Spark es su sucesor moderno. Encontrarás mejoras estructurales en nuestra guía de optimización, y si influye la falta de memoria lo descubrirás en la guía de RAM. ¿Sigues atascado? Abre un ticket en nuestra página de soporte y pega el enlace de tu informe de Spark: le echaremos un vistazo contigo.
Lanza tu servidor en 60 segundos en nuestro propio hardware.