🔢Cambia las Banderas de Inicio de JVM

  1. Inicia sesión con tu cuenta; si es la primera vez, encontrarás el nombre de usuario y la contraseña en el correo electrónico o en el panel de control.

  2. Selecciona el servidor que deseas cambiar de versión o tipo de juego de Minecraft.

  3. Ahora ve a configuración y luego a parámetros de inicio.

  4. Aquí puedes editar todos los parámetros disponibles para tu servidor.

  5. Para las banderas de Java, recomendamos no modificarlas si no sabes qué está sucediendo, ya que puede afectar el rendimiento del servidor. Recomendamos leer la siguiente parte para obtener más conocimientos sobre las Banderas de Inicio de la JVM.

Banderas de Inicio de JVM Recomendadas

Usa exactamente estas banderas, solo cambiando Xmx y Xms. Estas banderas funcionan y escalan según cualquier tamaño de memoria, incluso 500MB, pero las versiones modernas de Minecraft no funcionarán bien con tan poca memoria.

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

¡NO ASIGNE TODA SU MEMORIA DISPONIBLE EN UN HOST COMPARTIDO!

Cuando establezcas los valores de Xms y Xmx, si tu proveedor de servicios dice que tienes 8000M de memoria, ¡NO USES 8000M! Minecraft (y Java) necesita memoria adicional además de ese parámetro Xmx. Se recomienda reducir tu Xmx/Xms en aproximadamente 1000-1500M para evitar quedarse sin memoria o que el "OOMKiller" afecte a tu servidor. Esto también deja espacio para que el sistema operativo utilice memoria. ¿Tienes 8000M de memoria? Usa 6500M por seguridad. Pero también puedes preguntar a tu proveedor si cubrirán este gasto adicional por ti y te darán 9500M en su lugar. ¡Algunos proveedores lo harán! Solo pregúntales.

Recomendamos utilizar al menos 6-10 GB, ¡sin importar cuántos jugadores haya! Si no puedes permitirte 10 GB de memoria, da tanto como puedas, pero asegúrate de dejarle al sistema operativo algo de memoria también. G1GC funciona mejor con más memoria.

Sin embargo, más memoria no significa un mejor rendimiento por encima de cierto punto. Eventualmente, alcanzarás un punto de rendimientos decrecientes. Salir y conseguir 32 GB de RAM para un servidor solo desperdiciará tu dinero con retornos mínimos.

Si estás ejecutando MC con 12 GB o menos de memoria, no debes ajustar estos parámetros.

Si estás utilizando un valor de Xmx mayor de 12 GB

Si tienes y utilizas más de 12 GB de memoria, ajusta lo siguiente:

  • -XX:G1NewSizePercent=40

  • -XX:G1MaxNewSizePercent=50

  • -XX:G1HeapRegionSize=16M

  • -XX:G1ReservePercent=15

  • -XX:InitiatingHeapOccupancyPercent=20

TIP

Si observas un aumento en las recolecciones de la generación antigua después de esto, ¡vuelve a las banderas base!

Explicación de estos cambios:

  • El conjunto de banderas base tiene como objetivo 30/40 para reducir el riesgo de problemas con el espacio. Con más memoria, es menos problemático. Podemos asignar más a la nueva generación con 40/50, así como reducir el porcentaje de reserva, ya que la reserva predeterminada ya será más grande.

  • El aumento del tamaño de la región ayuda a reducir las asignaciones enormes y acelera el proceso de remarcar. Necesitamos un tamaño de región más pequeño en montones más pequeños para asegurar una cantidad adecuada de regiones disponibles.

  • Podemos comenzar a buscar memoria en la generación antigua para recuperar con más retraso con IHOP en 20, ya que tenemos más memoria de la generación antigua disponible en el espacio de la CPU.

Java GC Logging

¿Estás experimentando problemas con la generación antigua con estas banderas? Agrega las siguientes banderas según la versión de Java para habilitar el registro de la recolección de basura (GC Logging):

Java 8-10

-Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1M

Java 11+

-Xlog:gc*:logs/gc.log:time,uptime:filecount=5,filesize=1M

El registro de recolección de basura (GC) no afecta el rendimiento y puede dejarse activado en todo momento. Los archivos no ocuparán mucho espacio (5 MB).

Explicación Técnica de las Banderas

  1. -Xms matching -Xmx -- Why: Nunca debes ejecutar tu servidor con el caso de que -Xmx pueda agotar completamente la memoria del sistema. ¡Siempre se espera que tu servidor use todo el -Xmx! Luego debes asegurarte de que el sistema operativo tenga memoria adicional además de ese Xmx para cosas que no sean de nivel de Minecraft/sistema operativo. Por lo tanto, nunca debes ejecutar MC con configuraciones de -Xmx que no puedas respaldar si Java la utiliza por completo. Ahora, eso significa que si -Xms es menor que -Xmx, ¡TIENES MEMORIA NO UTILIZADA! La memoria no utilizada es memoria desperdiciada. G1 funciona mejor cuanta más memoria se le da. G1 elige de manera adaptativa cuánta memoria asignar a cada región para optimizar el tiempo de pausa. Si tienes más memoria de la que necesita para alcanzar un tiempo de pausa óptimo, G1 simplemente empujará ese excedente a la generación antigua, y no te perjudicará. La idea fundamental para mejorar el comportamiento de GC es asegurarse de que los objetos de corta duración mueran jóvenes y nunca sean promovidos prematuramente. Cuanta más memoria tenga G1, más seguridad tendrás de que los objetos no se promocionen prematuramente a la generación antigua. G1 opera de manera diferente a los recolectores anteriores y es capaz de manejar montones más grandes de manera más eficiente. Si no necesita la memoria que se le proporciona, no la utilizará. Todo el motor opera de manera diferente y no sufre de montones demasiado grandes, y esta es información ampliamente aceptada en la industria de que bajo G1 ¡debes mantener Xms y Xmx iguales!

  2. UnlockExperimentalVMOptions -- necesario para algunas de las opciones a continuación

  3. G1NewSizePercent: Estos son los importantes. Ahora puedes especificar porcentajes de un rango deseado general para la nueva generación. Con estas configuraciones, le decimos a G1 que no utilice su 5% predeterminado para la nueva generación, ¡y en cambio le damos un 40%! Minecraft tiene una tasa de asignación de memoria extremadamente alta, que va desde al menos 800 megabytes por segundo en un servidor de 30 jugadores. Y esto se debe principalmente a objetos de corta duración (posición de bloque). Esto significa que MC REALMENTE necesita más atención en la Nueva Generación para poder soportar esta tasa de asignación. Si tu nueva generación es demasiado pequeña, estarás ejecutando colecciones de nueva generación 1-2+ veces por segundo, lo cual es terrible. Tendrás tantas pausas que existe el riesgo de que el TPS sufra, y el servidor no podrá seguir el ritmo de los costos de la recolección de basura. Luego, combina el hecho de que los objetos ahora se promocionarán más rápido, lo que resultará en que tu Generación Antigua crezca más rápido. Con más Nueva Generación, podemos ralentizar los intervalos de las colecciones de Generación Joven, lo que da más tiempo para que los objetos de corta duración mueran jóvenes y, en general, un comportamiento de recolección de basura más eficiente.

  4. G1MixedGCLiveThresholdPercent: Controla cuándo incluir regiones en las recolecciones de basura mixtas en la recolección de basura joven, manteniendo la Generación Antigua ordenada sin realizar una recolección normal de basura en la Generación Antigua. Cuando tu memoria es inferior a este porcentaje, la Generación Antigua ni siquiera se incluirá en las recolecciones 'mixtas'. Las recolecciones mixtas no son tan intensivas como una recolección completa de la generación antigua, por lo que realizar limpiezas incrementales pequeñas de la generación antigua mantiene el uso de memoria ligero. El valor predeterminado es de 65 a 85 dependiendo de la versión de Java; lo estamos estableciendo en 90 para asegurarnos de recuperar la basura en la generación antigua lo más rápido posible y retener la mayor cantidad posible de regiones libres.

  5. G1ReservePercent=20: La tasa de asignación de memoria en las versiones más recientes de MC es realmente asombrosa. Corremos el riesgo de una temida "agotamiento de espacio" al no tener suficiente memoria libre para mover los datos. Esto garantiza que haya más memoria esperando para ser utilizada en esta operación. El valor predeterminado es 10, así que le estamos asignando otros 10.

  6. MaxTenuringThreshold=1: Minecraft tiene una tasa de asignación de memoria realmente alta. De esa memoria, la mayor parte se recupera en la generación Eden. Sin embargo, los datos transitorios pueden desbordarse al espacio Survivor. Inicialmente, intentamos eliminar por completo Survivor y obtuvimos resultados decentes, pero esto resulta en que los datos transitorios lleguen a la generación Old, lo cual no es bueno. Max Tenuring 1 asegura que no promovamos datos transitorios a la generación Old, pero cualquier cosa que sobreviva a 2 pases de la recolección de basura se asumirá como de mayor duración.

    Hacer esto reduce significativamente los tiempos de pausa en las Colecciones Jóvenes, ya que copiar datos hasta 15 veces en el espacio Survivor para un objeto tenido realmente lleva mucho tiempo para la memoria realmente antigua. Idealmente, el motor de GC debería rastrear la edad promedio de los objetos y eliminar los datos más rápido, pero eso no es cómo funciona.

    Considerando que la tasa promedio de GC es de 10 segundos hasta varios minutos por colección joven, esto no resulta en que se promocione 'basura', simplemente retrasa la recolección de memoria de mayor duración en las recolecciones de basura mixtas.

  7. SurvivorRatio=32: Debido a que reducimos drásticamente el MaxTenuringThreshold, estaremos disminuyendo drásticamente el uso del espacio Survivor. Esto libera más regiones para ser utilizadas por Eden en su lugar.

  8. AlwaysPreTouch: AlwaysPreTouch configura y reserva la memoria al inicio del proceso, asegurando que sea contigua, mejorando así su eficiencia. Esto mejora la velocidad de acceso a la memoria del sistema operativo. Es obligatorio utilizar Páginas Enormes Transparentes.

  9. +DisableExplicitGC: Muchos complementos creen que saben cómo controlar la memoria e intentan invocar la recolección de basura. Los complementos que hacen esto desencadenan una recolección completa de basura, provocando un pico masivo de retraso. Esta bandera desactiva la capacidad de los complementos para intentar esto, protegiéndote de su código deficiente.

  10. MaxGCPauseMillis=200: Esta configuración controla cuánta memoria se utiliza entre los rangos mínimo y máximo especificados para tu Nueva Generación. Es una "meta" para determinar cuánto tiempo deseas que tu servidor se detenga para realizar recolecciones. Un valor de 200 apunta a una pérdida máxima de 4 ticks. Esto resultará en una breve caída de TPS; sin embargo, el servidor puede compensar esta caída al instante, lo que significa que no tendrá un impacto significativo en tu TPS. 200 ms es menor de lo que los jugadores pueden reconocer. En las pruebas, limitar este valor a un número aún más bajo hace que G1 no recopile la memoria lo suficientemente rápido y potencialmente se quede sin espacio en la generación antigua, desencadenando una recolección completa. Solo porque este número sea 200 no significa que cada recolección será de 200. Significa que puede usar hasta 200 si realmente lo necesita, y debemos permitirle hacer su trabajo cuando hay memoria que recoger.

  11. +ParallelRefProcEnabled: Optimiza el proceso de GC para utilizar múltiples hilos en la verificación de referencias débiles. No estoy seguro de por qué esto no es la configuración predeterminada...

  12. G1RSetUpdatingPauseTimePercent=5: El valor predeterminado es el 10% del tiempo dedicado durante la pausa para actualizar los conjuntos de referencias (Rsets). Redúcelo al 5% para hacer que más de esta tarea sea concurrente y así reducir la duración de las pausas.

  13. G1MixedGCCountTarget=4: El valor predeterminado es 8. Debido a que buscamos realizar recolecciones más lentas, con un uso menor de la generación antigua, intentamos recuperar la memoria de la generación antigua más rápidamente para evitar quedarnos sin espacio en la generación antigua.

  14. G1HeapRegionSize=8M+: El valor predeterminado se calcula automáticamente. Muy importante para Minecraft, especialmente en la versión 1.15, ya que en situaciones de baja memoria, el cálculo predeterminado será en la mayoría de los casos demasiado bajo. Cualquier asignación de memoria de la mitad de este tamaño (4 MB) se considerará "Humongous" y se promocionará directamente a la generación antigua, siendo más difícil liberarla. Si permites que Java utilice el valor predeterminado, podrías tener una porción significativa de tu memoria tratada como Humongous.

  15. +PerfDisableSharedMem: Provoca que el recolector de basura escriba en el sistema de archivos, lo que puede causar una latencia importante si la entrada/salida de disco es elevada. Consulta https://www.evanjones.ca/jvm-mmap-pause.html.

Utilizando Páginas Grandes

Para Páginas Grandes, es aún más importante utilizar -Xms = -Xmx. Páginas Grandes necesitan tener toda la memoria especificada para ellas, o podrías terminar sin obtener los beneficios. Esta memoria de todos modos no será utilizada por el sistema operativo, así que úsala.

Además, utiliza estas banderas (Metaspace es solo para Java 8, no la uses para Java 7): -XX:+UseLargePagesInMetaspace

Páginas Enormes Transparentes

Característica controvertida, pero puede ser utilizable si no puedes configurar tu host para un auténtico HugeTLBFS. Intenta agregar -XX:+UseTransparentHugePages pero es sumamente importante que también tengas configurada AlwaysPreTouch. De lo contrario, es probable que THP te perjudique. No hemos medido cómo funciona THP para MC ni su impacto con AlwaysPreTouch, así que esta sección es para usuarios avanzados que deseen experimentar.

Última actualización

Logo

Copyright © 2024 HidenCloud™ by HidenNetwork™ - All rights reserved. | E: info@hidencloud.com | T/WA: +34624027199 | ID: 6H58JSXC8SCC2