Algunos de los archivos principales que querrás modificar para optimizar realmente tu servidor son Bukkit.yml, Paper-world-defaults.yml y Spigot.yml
Para usar estas configuraciones, detén tu servidor desde tu panel de control, luego haz clic en las pestañas a continuación para mostrar las configuraciones optimizadas para cada archivo. Estos archivos se pueden encontrar en la pestaña Administrador de Archivos en tu Panel de Control. Sin embargo, los archivos de Paper se encuentran en el directorio "config". Puedes abrirlos en el editor web en línea haciendo clic en el botón "editar" a la derecha del archivo. Una vez que hayas terminado de editar, asegúrate de hacer clic en el botón verde "Guardar", luego reinicia el servidor para que los cambios surtan efecto.
use-alternate-keepalive
Good starting value: true
Puedes habilitar el sistema alternativo de keepalive de Purpur para que los jugadores con mala conexión no sean desconectados con tanta frecuencia. Se sabe que tiene incompatibilidad con TCPShield.
simulation-distance
Good starting value: 4
La distancia de simulación es la distancia en chunks alrededor del jugador que el servidor procesará. Esencialmente, es la distancia desde el jugador en la que ocurrirán cosas. Esto incluye hornos fundiendo, cultivos y retoños creciendo, etc. Esta es una opción que querrás configurar intencionalmente baja, alrededor de 3
o 4
, debido a la existencia de view-distance
. Esto permite cargar más chunks sin procesarlos. Esto efectivamente permite que los jugadores vean más lejos sin el mismo impacto en el rendimiento.
view-distance
Good starting value: 7
Esta es la distancia en chunks que se enviará a los jugadores, similar a no-tick-view-distance de Paper.
La distancia total de visión será igual al mayor valor entre simulation-distance
y view-distance
. Por ejemplo, si la distancia de simulación está configurada en 4 y la distancia de visión en 12, la distancia total enviada al cliente será de 12 chunks.
view-distance
Good starting value: default
Este valor sobrescribe el de server.properties si no está configurado en default
. Deberías mantenerlo en default para tener tanto la distancia de simulación como la distancia de visión en un solo lugar para una gestión más sencilla.
delay-chunk-unloads-by
Good starting value: 10s
Esta opción te permite configurar cuánto tiempo permanecerán cargados los chunks después de que un jugador se vaya. Esto ayuda a no cargar y descargar constantemente los mismos chunks cuando un jugador se mueve de un lado a otro. Valores demasiado altos pueden resultar en demasiados chunks cargados al mismo tiempo. En áreas a las que se teletransportan frecuentemente y se cargan, considera mantener el área permanentemente cargada. Esto será más ligero para tu servidor que cargar y descargar chunks constantemente.
max-auto-save-chunks-per-tick
Good starting value: 8
Te permite ralentizar el guardado incremental del mundo distribuyendo la tarea durante más tiempo para un mejor rendimiento promedio. Es posible que desees configurar esto más alto que 8
con más de 20-30 jugadores. Si el guardado incremental no puede finalizar a tiempo, Bukkit guardará automáticamente los chunks restantes de una vez y comenzará el proceso nuevamente.
prevent-moving-into-unloaded-chunks
Good starting value: true
Cuando está habilitado, evita que los jugadores se muevan hacia chunks no cargados y provoquen cargas sincronizadas que ralentizan el hilo principal causando lag. La probabilidad de que un jugador se encuentre con un chunk no cargado es mayor cuanto menor sea tu view-distance.
entity-per-chunk-save-limit
Con la ayuda de esta entrada puedes establecer límites sobre cuántas entidades de un tipo específico pueden ser guardadas. Debes proporcionar un límite para cada proyectil al menos para evitar problemas con grandes cantidades de proyectiles siendo guardados y que tu servidor se bloquee al cargar eso. Puedes poner cualquier ID de entidad aquí, consulta la wiki de Minecraft para encontrar las IDs de entidades. Ajusta el límite según tus preferencias. El valor sugerido para todos los proyectiles es alrededor de 10.
También puedes añadir otras entidades por sus nombres de tipo a esa lista. Esta opción de configuración no está diseñada para evitar que los jugadores hagan grandes granjas de mobs
max-loads-per-projectile
Good starting value: 8
Especifica la cantidad máxima de chunks que un proyectil puede cargar durante su vida útil. Disminuir este valor reducirá las cargas de chunks causadas por proyectiles de entidades, pero podría causar problemas con tridentes, enderpearls, etc.
spawn-limits
La fórmula para limitar mobs es [número de jugadores] * [límite]
, donde "número de jugadores" es la cantidad actual de jugadores en el servidor. Lógicamente, cuanto menores sean los números, menos mobs verás. La configuración per-player-mob-spawn
aplica un límite adicional a esto, asegurando que los mobs se distribuyan equitativamente entre los jugadores. Reducir esto es un arma de doble filo; sí, tu servidor tendrá menos trabajo que hacer, pero en algunos modos de juego, los mobs que aparecen naturalmente son una gran parte del juego. Puedes reducirlo a 20 o menos si ajustas adecuadamente el rango de aparición de mobs (mob-spawn-range)
. Configurar el rango de aparición de mobs más bajo hará que parezca que hay más mobs alrededor de cada jugador. Si estás usando Paper, puedes establecer límites de mobs por mundo en la configuración de paper-world.
ticks-per
Esta opción establece con qué frecuencia (en ticks) el servidor intenta generar ciertas entidades vivientes. Los mobs de agua/ambientales no necesitan generarse en cada tick, ya que generalmente no son eliminados tan rápidamente. En cuanto a los monstruos: Aumentar ligeramente el tiempo entre apariciones no debería impactar las tasas de aparición, incluso en las granjas de mobs. En la mayoría de los casos, todos los valores bajo esta opción deberían ser mayores que 1
. Configurar esto a un valor más alto también permite que tu servidor maneje mejor las áreas donde la generación de mobs está deshabilitada.
mob-spawn-range
Good starting value: 3
Te permite reducir el rango (en chunks) de donde los mobs se generarán alrededor del jugador. Dependiendo del modo de juego de tu servidor y la cantidad de jugadores, es posible que desees reducir este valor junto con los límites de generación
en bukkit.yml. Configurar esto a un valor más bajo hará que parezca que hay más mobs a tu alrededor. Esto debe ser menor o igual a tu distancia de simulación, y nunca mayor que tu rango de desaparición forzada dividido por 16.
entity-activation-range
Puedes establecer a qué distancia del jugador debe estar una entidad para que se procese (haga cosas). Reducir esos valores ayuda al rendimiento, pero puede resultar en mobs que no respondan hasta que el jugador esté realmente cerca de ellos. Reducir esto demasiado puede romper ciertas granjas de mobs; las granjas de hierro son las víctimas más comunes.
entity-tracking-range
Esta es la distancia en bloques desde la cual las entidades serán visibles. Simplemente no serán enviadas a los jugadores. Si se configura demasiado bajo, esto puede hacer que los mobs parezcan aparecer de la nada cerca de un jugador. En la mayoría de los casos, esto debe ser mayor que tu rango de activación de entidades (entity-activation-range)
.
tick-inactive-villagers
Good starting value: false
Esto te permite controlar si los aldeanos deben ser procesados fuera del rango de activación. Esto hará que los aldeanos funcionen con normalidad e ignoren el rango de activación. Desactivar esto ayudará al rendimiento, pero podría ser confuso para los jugadores en ciertas situaciones. Esto puede causar problemas con las granjas de hierro y el reabastecimiento de comercio.
nerf-spawner-mobs
Good starting value: true
Puedes hacer que los mobs generados por un spawner de monstruos no tengan IA. Los mobs debilitados no harán nada. Puedes hacer que salten mientras están en el agua cambiando spawner-nerfed-mobs-should-jump
a true
en la configuración de paper-world.
despawn-ranges
Te permite ajustar los rangos de desaparición de entidades (en bloques). Reduce estos valores para eliminar los mobs que están lejos del jugador más rápidamente. Deberías mantener el rango suave alrededor de 30
y ajustar el rango duro a un poco más que tu distancia de simulación real, para que los mobs no desaparezcan inmediatamente cuando el jugador se aleja justo más allá del punto de carga de un chunk (esto funciona bien debido a delay-chunk-unloads-by
en la configuración de paper-world). Cuando un mob está fuera del rango duro, será eliminado instantáneamente. Cuando está entre el rango suave y duro, tendrá una probabilidad aleatoria de desaparecer. Tu rango duro debe ser mayor que tu rango suave. Debes ajustar esto de acuerdo a tu distancia de visión usando (simulation-distance * 16) + 8
. Esto tiene en cuenta parcialmente los chunks que aún no se han descargado después de que el jugador los haya visitado.
per-player-mob-spawns
Good starting value: true
Esta opción decide si las apariciones de mobs deben tener en cuenta cuántos mobs ya están alrededor del jugador objetivo. Puedes evitar muchos problemas relacionados con la inconsistencia en la aparición de mobs debido a que los jugadores crean granjas que ocupan todo el límite de mobs. Esto permitirá una experiencia de aparición más similar a la de un jugador individual, permitiéndote establecer límites de aparición
más bajos. Habilitar esto tiene un impacto muy leve en el rendimiento, sin embargo, su impacto se ve superado por las mejoras en los límites de aparición
que permite.
max-entity-collisions
Good starting value: 2
Sobrescribe la opción con el mismo nombre en spigot.yml. Te permite decidir cuántas colisiones puede procesar una entidad a la vez. Un valor de 0
causará la imposibilidad de empujar a otras entidades, incluidos los jugadores. Un valor de 2
debería ser suficiente en la mayoría de los casos. Vale la pena señalar que esto hará que la regla del juego maxEntityCramming sea inútil si su valor es superior al valor de esta opción de configuración.
update-pathfinding-on-block-update
Good starting value: false
Desactivar esto resultará en menos búsqueda de caminos, aumentando el rendimiento. En algunos casos, esto hará que los mobs parezcan más lentos; simplemente actualizarán su camino pasivamente cada 5 ticks (0.25 segundos).
fix-climbing-bypassing-cramming-rule
Good starting value: true
Habilitar esto solucionará que las entidades no se vean afectadas por el amontonamiento mientras escalan. Esto evitará que cantidades absurdas de mobs se acumulen en espacios pequeños, incluso si están escalando (arañas).
armor-stands.tick
Good starting value: false
En la mayoría de los casos, puedes configurar esto de manera segura en false
. Si estás usando soportes de armadura o cualquier plugin que modifique su comportamiento y experimentas problemas, vuelve a habilitarlo. Esto evitará que los soportes de armadura sean empujados por el agua o afectados por la gravedad.
armor-stands.do-collision-entity-lookups
Good starting value: false
Aquí puedes desactivar las colisiones de los soportes de armadura. Esto ayudará si tienes muchos soportes de armadura y no necesitas que colisionen con nada.
tick-rates
¡No se recomienda cambiar estos valores de sus configuraciones predeterminadas mientras el DAB de Pufferfish esté habilitado!
Esto decide con qué frecuencia se activan ciertos comportamientos y sensores en ticks. acquirepoi para los aldeanos parece ser el comportamiento más pesado, por lo que se ha aumentado significativamente. Disminúyelo en caso de problemas con los aldeanos encontrando su camino.
dab.enabled
Good starting value: true
DAB (activación dinámica del cerebro) reduce la cantidad de veces que se procesa una entidad cuanto más lejos está de los jugadores. DAB funciona en un gradiente en lugar de un corte brusco como EAR. En lugar de procesar completamente las entidades cercanas y apenas procesar las entidades lejanas, DAB reducirá la cantidad de veces que se procesa una entidad basado en el resultado de un cálculo influenciado por dab.activation-dist-mod.
dab.max-tick-freq
Good starting value: 20
Define la cantidad más lenta en que se procesarán las entidades más alejadas de los jugadores. Aumentar este valor puede mejorar el rendimiento de las entidades fuera de la vista, pero puede romper granjas o debilitar significativamente el comportamiento de los mobs. Si habilitar DAB rompe las granjas de mobs, intenta disminuir este valor.
dab.activation-dist-mod
Good starting value: 7
Controla el gradiente en el que los mobs son procesados. Disminuir esto activará DAB más cerca de los jugadores, mejorando las ganancias de rendimiento de DAB, pero afectará cómo las entidades interactúan con su entorno y puede romper las granjas de mobs. Si habilitar DAB rompe las granjas de mobs, intenta aumentar este valor.
enable-async-mob-spawning
Good starting value: true
Si se debe habilitar la generación asíncrona de mobs. Para que esto funcione, la configuración per-player-mob-spawns de Paper debe estar habilitada. Esta opción no genera mobs de manera asíncrona, pero descarga gran parte del esfuerzo computacional involucrado en la generación de nuevos mobs a un hilo diferente. Habilitar esta opción no debería ser notable en el juego vanilla.
enable-suffocation-optimization
Good starting value: true
Esta opción optimiza una verificación de asfixia (la comprobación para ver si un mob está dentro de un bloque y si debe recibir daño por asfixia) limitando la frecuencia de la verificación al tiempo de espera del daño. Esta optimización debería ser imposible de notar a menos que seas un jugador extremadamente técnico que esté utilizando un tiempo preciso de ticks para matar a una entidad exactamente en el momento adecuado por asfixia.
inactive-goal-selector-throttle
Good starting value: true
Regula el selector de objetivos de la IA en ticks de entidades inactivas, haciendo que las entidades inactivas actualicen su selector de objetivos cada 20 ticks en lugar de cada tick. Puede mejorar el rendimiento en algunos puntos porcentuales y tiene implicaciones menores en la jugabilidad.
zombie.aggressive-towards-villager-when-lagging
Good starting value: false
Habilitar esto hará que los zombis dejen de apuntar a los aldeanos si el servidor está por debajo del umbral de TPS establecido con lagging-threshold
en purpur.yml.
entities-can-use-portals
Good starting value: false
Esta opción puede deshabilitar el uso de portales para todas las entidades, excepto para el jugador. Esto evita que las entidades carguen chunks al cambiar de mundo, lo cual se maneja en el hilo principal. El efecto secundario es que las entidades no podrán atravesar los portales.
villager.lobotomize.enabled
Good starting value: true
¡Esto solo debe habilitarse si los aldeanos están causando lag! De lo contrario, las verificaciones de búsqueda de caminos pueden disminuir el rendimiento.
Los aldeanos lobotomizados se despojan de su IA y solo reponen sus ofertas de vez en cuando. Habilitar esto lobotomizará a los aldeanos que no pueden encontrar el camino a su destino. Liberarlos debería deslobotomizarlos.
villager.search-radius
Radio dentro del cual los aldeanos buscarán bloques de sitio de trabajo y camas. Esto mejora significativamente el rendimiento con una gran cantidad de aldeanos, pero evitará que detecten bloques de sitio de trabajo o camas que estén más lejos del valor establecido.
merge-radius
Esto decide la distancia entre los objetos y orbes de experiencia para fusionarse, reduciendo la cantidad de objetos procesándose en el suelo. Configurarlo demasiado alto dará la ilusión de que los objetos o los orbes de experiencia desaparecen al fusionarse. Configurarlo demasiado alto romperá algunas granjas, así como permitirá que los objetos se teletransporten a través de bloques. No se realizan verificaciones para evitar que los objetos se fusionen a través de paredes (a menos que la configuración fix-items-merging-through-walls
de Paper esté activada). La experiencia solo se fusiona al crearse.
hopper-transfer
Good starting value: 8
Tiempo en ticks que los tolvas esperarán para mover un objeto. Aumentar esto ayudará a mejorar el rendimiento si hay muchas tolvas en tu servidor, pero romperá relojes basados en tolvas y posiblemente sistemas de clasificación de objetos si se configura demasiado alto.
hopper-check
Good starting value: 8
Tiempo en ticks entre las comprobaciones de las tolvas para detectar un objeto sobre ellas o en el inventario sobre ellas. Aumentar esto ayudará al rendimiento si hay muchas tolvas en tu servidor, pero romperá relojes basados en tolvas y sistemas de clasificación de objetos que dependen de corrientes de agua.
alt-item-despawn-rate
Esta lista te permite establecer un tiempo alternativo (en ticks) para hacer que ciertos tipos de objetos caídos se despawnen más rápido o más lento que el valor predeterminado. Esta opción puede utilizarse en lugar de plugins de limpieza de objetos junto con merge-radius
para mejorar el rendimiento.
redstone-implementation
Good starting value: ALTERNATE_CURRENT
Reemplaza el sistema de redstone con versiones más rápidas y alternativas que reducen las actualizaciones redundantes de bloques, disminuyendo la cantidad de lógica que tu servidor tiene que calcular. Usar una implementación no vanilla puede introducir inconsistencias menores en redstone muy técnica, pero las mejoras en rendimiento superan ampliamente los posibles problemas específicos. Una opción de implementación no vanilla también puede corregir otras inconsistencias de redstone causadas por CraftBukkit.
La implementación ALTERNATE_CURRENT
está basada en el mod Alternate Current. Puedes encontrar más información sobre este algoritmo en su página de recursos.
hopper.disable-move-event
Good starting value: false
El evento InventoryMoveItemEvent no se dispara a menos que haya un plugin escuchando activamente ese evento. Esto significa que solo debes establecer esto en true si tienes dicho(s) plugin(s) y no te importa que no puedan actuar en este evento. No lo establezcas en true si quieres utilizar plugins que escuchen este evento, por ejemplo, plugins de protección.
hopper.ignore-occluding-blocks
Good starting value: true
Determina si las tolvas ignorarán los contenedores dentro de bloques completos, por ejemplo, un carrito tolva dentro de un bloque de arena o grava. Mantener esto habilitado romperá algunas contraptions que dependen de ese comportamiento.
tick-rates.mob-spawner
Good starting value: 2
Esta opción te permite configurar con qué frecuencia deben ser activados los spawners. Valores más altos significan menos lag si tienes muchos spawners, aunque si se configura demasiado alto (en relación con el retraso de tus spawners), las tasas de aparición de mobs disminuirán.
optimize-explosions
Good starting value: true
Si configuras esto en true, reemplazarás el algoritmo de explosiones vanilla con uno más rápido, a costa de una ligera inexactitud en el cálculo del daño de las explosiones. Por lo general, esto no es perceptible.
treasure-maps.enabled
Good starting value: false
Generar mapas del tesoro es extremadamente costoso y puede colgar un servidor si la estructura que intenta localizar está en un chunk no generado. Solo es seguro habilitar esto si has pregenerado tu mundo y configurado un borde de mundo vanilla.
treasure-maps.find-already-discovered
El valor predeterminado de esta opción hace que los mapas recién generados busquen estructuras no exploradas, que generalmente están en chunks aún no generados. Configurándolo en true, los mapas pueden llevar a estructuras que ya fueron descubiertas anteriormente. Si no cambias esto a true
, podrías experimentar que el servidor se cuelgue o se bloquee al generar nuevos mapas del tesoro. villager-trade
se refiere a mapas intercambiados por aldeanos y loot-tables
se refiere a cualquier cosa que genere botín dinámicamente, como cofres de tesoro, cofres de mazmorras, etc.
tick-rates.grass-spread
Good starting value: 4
El tiempo en ticks entre intentos del servidor para propagar césped o micelio. Esto hará que grandes áreas de tierra tarden un poco más en convertirse en césped o micelio. Configurarlo alrededor de 4
debería funcionar bien si deseas reducirlo sin que la tasa de propagación disminuida sea notable.
tick-rates.container-update
Good starting value: 1
El tiempo en ticks entre actualizaciones de contenedores. Aumentar esto puede ayudar si las actualizaciones de contenedores te causan problemas (raramente sucede), pero hace que sea más probable que los jugadores experimenten desincronización al interactuar con inventarios (objetos fantasma).
non-player-arrow-despawn-rate
Good starting value: 20
Tiempo en ticks después del cual las flechas disparadas por los mobs deben desaparecer después de golpear algo. Los jugadores de todos modos no pueden recogerlas, por lo que podrías configurarlo en algo como 20 (1 segundo).
creative-arrow-despawn-rate
Good starting value: 20
Tiempo en ticks después del cual las flechas disparadas por jugadores en modo creativo deberían desaparecer después de golpear algo. Los jugadores de todos modos no pueden recogerlas, por lo que podrías configurarlo en algo como 20
(1 segundo).
disable-method-profiler
Good starting value: true
Esta opción deshabilitará algunos perfiles adicionales realizados por el juego. Este perfilado no es necesario para ejecutar en producción y puede causar lag adicional.
dolphin.disable-treasure-searching
Good starting value: true
Evita que los delfines realicen búsquedas de estructuras similares a los mapas del tesoro.
teleport-if-outside-border
Good starting value: true
Permite teleportar al jugador al punto de generación del mundo si están fuera del borde del mundo. Esto es útil ya que el borde de mundo vanilla puede ser evadido y el daño que causa al jugador puede ser mitigado.
En conclusión, la optimización de la configuración de tu servidor es crucial para mantener un juego fluido y prevenir problemas de rendimiento como el lag y la disminución del TPS. Cada ajuste debe ser cuidadosamente considerado según las necesidades específicas de tu servidor y la actividad de los jugadores. Ajustando configuraciones como la distancia de visión, los límites de spawn y los intervalos de ticks, puedes encontrar un equilibrio entre rendimiento y experiencia de juego. Recuerda monitorear regularmente las métricas de rendimiento de tu servidor después de hacer cambios para asegurarte de que tengan el efecto deseado. Con estas optimizaciones implementadas, tu servidor puede ofrecer un entorno más estable y placentero para los jugadores.
Esta guía te ayuda a prevenir retrasos (PROBLEMAS DE TPS) en tus servidores optimizando las configuraciones.
Nota para los usuarios que están en vanilla, Fabric o Spigot (o cualquier cosa por debajo de Paper): ve a tu archivo server.properties y cambia sync-chunk-writes
a false
. Esta opción está forzadamente configurada en false en Paper y sus bifurcaciones, pero en otras implementaciones de servidor necesitas cambiarla a false manualmente. Esto permite que el servidor guarde los chunks fuera del hilo principal, reduciendo la carga en el bucle principal de ticks.
Nunca habrá una guía que te dé resultados perfectos. Cada servidor tiene sus propias necesidades y límites en cuanto a cuánto puedes o estás dispuesto a sacrificar. Trastear con las opciones para ajustarlas a las necesidades de tu servidor es de lo que se trata. Esta guía solo pretende ayudarte a entender qué opciones impactan en el rendimiento y qué es lo que cambian exactamente. Si crees que has encontrado información inexacta en esta guía, eres libre de abrir un problema o configurar una solicitud de extracción para corregirlo.
Tu elección de software de servidor puede marcar una gran diferencia en el rendimiento y las posibilidades de la API. Actualmente, hay múltiples servidores JAR populares viables, pero también hay algunos de los que deberías mantenerte alejado por varias razones.
Selecciones principales recomendadas:
Paper: el software de servidor más popular que busca mejorar el rendimiento mientras soluciona inconsistencias de jugabilidad y mecánicas.
Pufferfish: una bifurcación de Paper que busca mejorar aún más el rendimiento del servidor.
Purpur: una bifurcación de Pufferfish centrada en las características y la libertad de personalización.
Debes evitar:
Cualquier JAR de servidor de pago que afirme tener algo asíncrono: 99.99% de probabilidad de ser una estafa.
Bukkit/CraftBukkit/Spigot: extremadamente obsoletos en términos de rendimiento en comparación con otros software de servidor a los que tienes acceso.
Cualquier plugin/software que habilite/deshabilite/recargue plugins en tiempo de ejecución. Consulta esta sección para entender por qué.
Muchas bifurcaciones más abajo de Pufferfish o Purpur encontrarán inestabilidad y otros problemas. Si buscas más ganancias de rendimiento, optimiza tu servidor o invierte en una bifurcación privada personal.
Saber cómo optimizar tu servidor es vital para prevenir el lag del servidor. Afortunadamente, hay muchas herramientas disponibles para que puedas obtener el mejor rendimiento posible de tu servidor.
Pre-generar tu mundo
Un paso vital para eliminar el lag es pre-generar el mundo. Esto debe hacerse antes que cualquier otra cosa. La mejor manera de hacerlo es con el plugin Chunky. Todo lo que tienes que hacer es instalar el plugin y ejecutar los siguientes comandos: /chunky radius 5000 seguido de /chunky start.
Esto pre-generará un radio de 5,000 bloques alrededor del punto de aparición de tu mundo. El servidor tendrá mucho lag mientras el proceso se esté ejecutando, pero una vez que haya terminado, tu rendimiento mejorará dramáticamente. Puedes aumentar el radio tanto como quieras, pero recomendamos mantenerlo por debajo de los 20,000 bloques. Si es mayor, podrías crear más lag del que estarías previniendo.
Para instalar spark, solo necesitas descargar el archivo .jar más reciente de spark desde la página de descargas y colocarlo en la carpeta de mods
o plugins
del servidor.
spark se cargará la próxima vez que tu servidor se (re)inicie.
Podrás controlar spark con el comando /spark
.
RoseStacker (Este plugin es perfecto para servidores que desean aliviar las fuentes comunes de lag, al mismo tiempo que obtienen acceso a funciones que mejoran la funcionalidad y el ambiente del servidor.)
Aquí encontrará cómo prevenir ciertos exploits para proteger su servidor.
Esta guía asumirá que estás utilizando . Algunos ajustes necesarios para que esta guía funcione no están disponibles en Paper o Spigot. Puede que existan vulnerabilidades similares en servidores vanilla, fabric o forge, y tendrás que encontrar mods que las solucionen en esos cargadores.ç
Mantén actualizado el software de tu servidor. Hay vulnerabilidades que se corrigen en las versiones más recientes del software, aunque no se anuncien. Si tienes un servidor, deberías estar utilizando la última versión disponible para evitar vulnerabilidades críticas.
Los soportes para armaduras se pueden usar para crear máquinas que causan retrasos. Esto se logra colocando grandes cantidades de soportes para armaduras y haciendo que se muevan mediante agua, pistones u otros métodos. Esto se puede solucionar desactivando la búsqueda de actualizaciones y colisiones de los soportes para armaduras. De esta manera, los soportes para armaduras no podrán ser empujados ni atraídos (incluso por la gravedad).
paper-world-defaults.yml
Los libros son un objetivo común para técnicas de explotación y han sido utilizados en el pasado para todo tipo de acciones desagradables, como exploits de duplicación, exploits de bloqueo y obligar a los servidores a quedarse sin memoria al generar cantidades masivas de datos de chunk.
Opción 1
Reducir moderadamente el límite máximo de páginas puede mitigar la mayoría de los exploits relacionados con los libros sin afectar a los clientes de vanilla.
paper-global.yml
Opción 2
Desactivar completamente los libros previene la mayoría de los exploits relacionados con los libros (siempre y cuando los plugins no creen libros no estándar). La opción de configuración Pufferfish evita que los jugadores escriban en el libro, por lo tanto, elimina cualquier cosa que requiera la entrada del jugador para funcionar.
pufferfish.yml
Este exploit es similar al del soporte para armaduras, pero en lugar de usar soportes para armaduras, utiliza entidades que pueden ser empujadas por otras entidades. Esto se puede solucionar estableciendo un límite más pequeño en cuántas entidades pueden colisionar con una entidad singular. Puedes establecer el máximo de colisiones de entidades (max-entity-collisions) en 2 para mantener un comportamiento relativamente natural, o establecerlo en 0 para deshabilitar completamente las colisiones. La opción para corregir el bypass de la regla de apretujamiento al escalar también está disponible, pero está desactivada por defecto.
paper-world-defaults.yml
Algunos comandos en el servidor pueden tener mucha lógica involucrada en sus sugerencias de comandos. Esto puede ser explotado enviando muchos paquetes que soliciten al servidor enviar sugerencias para el comando. Esto se puede mitigar estableciendo un límite de paquetes para las sugerencias de comandos ligeramente por encima de la velocidad normal de escritura de comandos, de modo que los jugadores normales no se vean afectados.
paper-global.yml
Aunque incluso Spigot te protegerá de este exploit, hay un pequeño descuido que permitirá que un solo comando pueda ser utilizado para realizar este. Para solucionarlo, simplemente elimina el comando /skill de la lista de exclusiones de spam en el archivo spigot.yml.
spigot.yml
A veces, la gran cantidad de jugadores que se unen al servidor puede causar que se vuelva lento. Esto es especialmente cierto durante ataques de bots y momentos después de reiniciar el servidor. Esto se puede solucionar configurando un límite máximo de ingresos por tick. Los jugadores que se unan serán retrasados en el tiempo para que el servidor pueda procesarlos correctamente entre uno y otro. Si los ingresos siguen abrumando al servidor, también puedes habilitar max-joins-per-second en purpur.yml. Esto hará que el valor de la configuración de Paper se aplique por segundo en lugar de por tick.
paper-global.yml
purpur.yml
Limitar la cantidad de actualizaciones consecutivas de vecinos antes de omitir las adicionales. Reducir moderadamente este valor no tiene impacto en el juego y ayuda a mitigar diversas "máquinas de retraso por actualización de vecinos".
server.properties
Los proyectiles pueden quedar suspendidos indefinidamente en columnas de burbujas. También pueden ser transportados en masa a chunks descargados. Si alguien carga el chunk con muchos proyectiles acumulados, el servidor puede colapsar debido a la carga de demasiadas cosas a la vez. Esto se puede evitar limitando cuánto tiempo pueden existir los proyectiles en el mundo y cuántos de ellos se guardan y cargan con un chunk. Aplicar un límite de tiempo a las perlas de ender evitará el uso de dispositivos de suspensión de perlas de ender.
paper-world-defaults.yml
pufferfish.yml
Los jugadores malintencionados pueden usar un autoclicker o un mod para alternar entre recetas del libro de recetas extremadamente rápido. Esta es una operación costosa para el servidor y puede causar grandes ralentizaciones. Este problema está corregido en la configuración predeterminada de Paper, pero las configuraciones más antiguas pueden no tener esta corrección aplicada, así que asegúrate de que esté presente.
paper-global.yml
Cuando se genera un nuevo mapa del tesoro, generalmente a través de un aldeano cartógrafo o al abrir un cofre que contiene un mapa del tesoro, el servidor busca el tesoro al que el mapa debería llevar. Esta búsqueda se realiza de una manera que en la mayoría de los casos provoca la carga de muchos chunks y posiblemente su generación. Esta búsqueda puede detener el servidor el tiempo suficiente como para que el proceso de vigilancia (watchdog) lo detenga. También puede ser desencadenada al alimentar a los delfines con pescado.
Option 1
Para solucionar este problema, básicamente debes deshabilitar los mapas del tesoro y la capacidad de los delfines para buscar tesoros. Esta es la solución recomendada y 100% efectiva.
paper-world-defaults.yml
purpur.yml
Option 2
Como alternativa, puedes mantener los mapas habilitados pero configurar un borde del mundo vanilla y asegurarte de que tu mundo esté pregenerado dentro de ese borde. Luego, puedes garantizar que los tesoros ya descubiertos sean válidos como resultado de la búsqueda. Esto evitará que la búsqueda de tesoros cargue chunks que no estén generados.
paper-world-defaults.yml
La gestión del rendimiento y la seguridad del servidor requiere una cuidadosa consideración de diversas técnicas de explotación y mecanismos que pueden afectar la jugabilidad y la estabilidad. Desde el manejo de interacciones entre entidades hasta el control de la carga de chunks durante la búsqueda de tesoros, los administradores deben implementar configuraciones y actualizaciones estratégicas.
Asegurarse de que las configuraciones del servidor, como deshabilitar las búsquedas de mapas del tesoro o limitar las interacciones de las entidades, estén alineadas con los objetivos de rendimiento puede mitigar posibles ralentizaciones o caídas causadas por operaciones intensivas. Además, mantener actualizado el software del servidor con los últimos parches y configuraciones es crucial para protegerse contra nuevas técnicas de explotación y vulnerabilidades.
Al equilibrar la funcionalidad con las optimizaciones de rendimiento, los administradores de servidores pueden ofrecer una experiencia estable y placentera para los jugadores, al mismo tiempo que mantienen la seguridad y previenen problemas disruptivos en el juego.
Buen valor inicial: true. Activa esto para ocultar minerales de los x-rayers. Para una configuración detallada de esta función, consulta la Configuración de Anti-Xray.
anti-xray.enabled
Good starting value: true
Activa esto para ocultar minerales de los x-rayers. Para una configuración detallada de esta función, consulta la Configuración de Anti-Xray. Habilitar esto realmente disminuirá el rendimiento, sin embargo, es mucho más eficiente que cualquier plugin anti-xray. En la mayoría de los casos, el impacto en el rendimiento será insignificante.
nether-ceiling-void-damage-height
Good starting value: 127
Si esta opción es mayor que 0
, los jugadores por encima del nivel Y establecido recibirán daño como si estuvieran en el vacío. Esto evitará que los jugadores utilicen el techo del Nether. El Nether vanilla tiene una altura de 128 bloques, por lo que probablemente debas establecerlo en 127
. Si modificas la altura del Nether de alguna manera, debes establecerlo a [tu_altura_del_nether] - 1
.
Vanilla Minecraft y el software de servidor de Minecraft en la versión 1.20.5+ requieren Java 21 o superior. Oracle ha cambiado su licencia y ya no hay razones convincentes para obtener Java de ellos. Los proveedores recomendados son Adoptium y Amazon Corretto. Implementaciones alternativas de JVM como OpenJ9 o GraalVM pueden funcionar, pero no son compatibles con Paper y se sabe que causan problemas, por lo tanto, actualmente no se recomiendan.
Tu recolector de basura se puede configurar para reducir los picos de lag causados por tareas grandes del recolector de basura. Puedes encontrar banderas de inicio optimizadas para servidores de Minecraft aquí SOG
. Ten en cuenta que esta recomendación no funcionará en implementaciones alternativas de JVM. Se recomienda usar el generador de banderas de inicio flags.sh para obtener las banderas de inicio correctas para tu servidor.
Además, agregar la bandera beta --add-modules=jdk.incubator.vector
antes de -jar
en tus banderas de inicio puede mejorar el rendimiento. Esta bandera permite a Pufferfish utilizar instrucciones SIMD en tu CPU, lo que hace que algunos cálculos sean más rápidos. Actualmente, se utiliza para hacer que el renderizado en ciertos plugins de mapas en el juego (como imageonmaps) sea posiblemente 8 veces más rápido.
Absolutamente innecesarios ya que pueden ser reemplazados con merge-radius y alt-item-despawn-rate y, francamente, son menos configurables que las configuraciones básicas del servidor. Tienden a utilizar más recursos escaneando y eliminando objetos que simplemente no eliminar los objetos en absoluto.
Es realmente difícil justificar su uso. Apilar entidades generadas naturalmente causa más lag que no apilarlas en absoluto, debido a que el servidor intenta constantemente generar más mobs. El único caso de uso "aceptable" es para los spawners en servidores con una gran cantidad de ellos.
Cualquier cosa que habilite o deshabilite plugins en tiempo de ejecución es extremadamente peligroso. Cargar un plugin de esa manera puede causar errores fatales con los datos de seguimiento, y deshabilitar un plugin puede llevar a errores debido a la eliminación de dependencias. El comando /reload
sufre exactamente los mismos problemas, y puedes leer más al respecto en la publicación del blog de me4502.
Paper ofrece un comando /mspt
que te dirá cuánto tiempo tardó el servidor en calcular los ticks recientes. Si el primer y segundo valor que ves son inferiores a 50, ¡enhorabuena! ¡Tu servidor no está experimentando retrasos! Si el tercer valor es superior a 50, significa que al menos un tick ha tardado más. Esto es completamente normal y ocurre de vez en cuando, así que no te preocupes.
Spark es un plugin que te permite perfilar el uso de CPU y memoria de tu servidor. Puedes aprender cómo usarlo en su wiki. También hay una guía sobre cómo identificar la causa de los picos de lag aquí.
Una forma de ver qué puede estar sucediendo cuando tu servidor tiene lag son los Timings. Timings es una herramienta que te permite ver exactamente qué tareas están tomando más tiempo. Es la herramienta más básica para solucionar problemas y si solicitas ayuda con respecto al lag, lo más probable es que te pidan tus Timings. Timings se sabe que tiene un impacto significativo en el rendimiento de los servidores; se recomienda usar el plugin Spark en lugar de Timings y usar Purpur o Pufferfish para desactivar completamente Timings.
Para obtener los Timings de tu servidor, solo necesitas ejecutar el comando /timings paste
y hacer clic en el enlace que se te proporciona. Puedes compartir este enlace con otras personas para que te ayuden. También es fácil malinterpretarlos si no sabes lo que estás haciendo. Existe un tutorial en video detallado de Aikar sobre cómo leerlos.
Para ver cómo solucionar exploits que pueden causar picos de lag o caídas en un servidor de Minecraft, consulta