Minecraft

Tu servidor de Minecraft no usa toda la RAM: por qué pasa y cómo arreglarlo

Casi siempre es Java funcionando como debe. Aquí ves cómo distinguir lo normal de un problema real, con -Xmx, user_jvm_args.txt y spark health.

Equipo de TheGameHosting 9 min de lectura
Servidor de Minecraft no usa toda la RAM: un módulo de memoria DDR5 para servidor sobre fondo oscuro
Foto: PantheraLeo1359531, CC BY 4.0, vía Wikimedia Commons (fondo añadido)

Si tu servidor de Minecraft no usa toda la RAM que le asignaste, casi siempre es normal. Java solo toma la memoria que necesita, el recolector de basura la libera otra vez, y el número que ves en un panel o en el Administrador de tareas no es lo mismo que el heap de Java. Solo es un problema real en pocos casos: un -Xmx mal escrito, un comando de arranque que ignora tu memoria, Java de 32 bits, o un servidor Forge o NeoForge que lee user_jvm_args.txt con la línea de memoria todavía comentada.

Aquí ves cómo saber en qué caso estás, cómo medir con spark y por qué más RAM casi nunca quita el lag.

Por qué tu servidor de Minecraft no usa toda la RAM

Java guarda el mundo, las entidades y los datos de plugins en el heap. Dos parámetros de arranque lo controlan:

  • -Xmx fija el tamaño máximo del heap. La documentación de java de Oracle lo define así y aclara que equivale a -XX:MaxHeapSize.
  • -Xms fija el tamaño mínimo e inicial del heap.

Si -Xms es menor que -Xmx, la JVM arranca chica y agranda el heap solo cuando le hace falta. Con G1, el recolector por defecto en Java actual, Oracle explica que el heap se redimensiona tras ciertas pausas de recolección y que ese proceso puede devolver memoria al sistema operativo o pedirle más. Por eso un servidor con 8 GB permitidos puede quedarse en 3 o 4 GB durante horas. PaperMC lo dice tal cual en su guía de las flags de Aikar: si el servidor no necesita la memoria que le diste, no la va a usar.

Tres cosas más confunden:

  1. La recolección de basura hace serrucho. La memoria sube mientras los jugadores cargan chunks y baja cuando el recolector limpia. Una lectura justo después de limpiar no te dice cuál es el pico.
  2. Memoria del proceso no es heap. Los paneles y monitores del sistema muestran la memoria de todo el proceso de Java. PaperMC aclara que Minecraft (y Java) necesitan memoria además de lo que pongas en Xmx (metadatos de clases, hilos, búferes nativos), así que los dos números nunca coinciden.
  3. Un servidor vacío gasta poco. Sin jugadores quedan pocos chunks cargados y el heap se mantiene chico. Mide con tu cantidad normal de jugadores.

¿Es normal o es un problema?

Lo que vesLo más probableQué hacer
La memoria sube y baja, TPS en 20NormalNada
Poca memoria pero lag con gente conectadaCuello de botella de CPU o del hilo principalPerfilar con spark
El máximo del heap en spark es mucho menor que tu plan-Xmx mal puesto o ignoradoRevisar el comando de arranque
Se cae con OutOfMemoryErrorEl heap de verdad es chicoSubir -Xmx o el plan
El proceso muere sin error de JavaSe pasó del límite con memoria fuera del heapDejar margen bajo el límite
En Windows el heap nunca pasa de ~1.5 GBJava de 32 bitsInstalar Java de 64 bits

Lo que importa es el máximo del heap, no el uso del momento. Si coincide con lo que configuraste, el servidor puede usar esa memoria cuando la necesite.

Cómo ver cuánta RAM puede usar de verdad tu servidor

spark es un perfilador de rendimiento, y PaperMC indica que desde la 1.21 Paper ya lo trae incluido. En Fabric, Forge, NeoForge o un Paper más viejo lo agregas como mod o plugin. Estos son los comandos de memoria según la documentación de spark:

  1. Abre la consola del servidor. En TheGameHosting, entra a tu servidor en el panel y elige Console.
  2. Escribe spark health show --memory. Según spark, health reporta TPS, CPU, memoria y disco, y --memory agrega el detalle del uso de memoria de la JVM.
  3. Compara el máximo del heap con el valor que querías poner. Si asignaste 6 GB y spark marca alrededor de 1 GB, la flag no le está llegando a Java.
  4. Escribe spark gc para ver el historial de recolección de basura. Pausas largas o muy seguidas significan que el heap anda apretado.
  5. Si hay lag y la memoria se ve bien, corre spark profiler start --timeout 600 mientras pasa el lag y abre el enlace del reporte que te da a los 10 minutos.
Server console
spark health show --memory
spark gc
spark profiler start --timeout 600

En la consola los comandos van sin diagonal. Dentro del juego, un operador usa /spark …. En el cliente de Forge o Fabric el comando es /sparkc, pero en un servidor dedicado es spark.

Solución 1: -Xmx está mal o no está

Los errores de siempre:

  • Unidad equivocada. -Xmx4G o -Xmx4096M están bien. Con -Xmx4GB Java se detiene con «Invalid maximum heap size». Un número solo, como -Xmx4096, son bytes y no megas, y Java no arranca porque el heap quedaría diminuto.
  • Xms mayor que Xmx. Java no arranca y avisa «Initial heap size set to a larger value than the maximum heap size».
  • La flag en el lugar equivocado. Las flags de la JVM van antes de -jar. Lo que pongas después del nombre del jar se lo pasa a Minecraft, no a Java, y la memoria se ignora.
  • La flag aparece dos veces. Algunos scripts agregan un segundo -Xmx. Deja solo uno.

Así se ve una línea de arranque correcta:

start.sh
java -Xms6G -Xmx6G -jar server.jar --nogui

PaperMC recomienda poner -Xms igual a -Xmx y explica el motivo: si Xms es menor que Xmx, tienes memoria sin usar, y la memoria sin usar es memoria desperdiciada. Aun así, Oracle aclara que las páginas del heap normalmente se ocupan a medida que la aplicación las usa. Las flags de Aikar agregan -XX:+AlwaysPreTouch, que hace que la JVM toque todo el heap al arrancar, así que con ellas verás mucho uso desde el primer minuto. Es lo esperado.

Solución 2: Forge y NeoForge ignoran tu memoria

Los servidores nuevos de Forge y NeoForge arrancan con run.sh o run.bat, que leen las flags de Java de un archivo llamado user_jvm_args.txt en la carpeta del servidor. La plantilla explica que Xmx y Xms son la RAM máxima y mínima, pero la línea de ejemplo viene comentada con #. Si nunca le quitas el #, Java usa su heap por defecto.

user_jvm_args.txt
-Xms6G
-Xmx6G

El equipo de NeoForge advierte algo más sobre su ServerStarterJar: los argumentos de la JVM que pongas en user_jvm_args.txt no se toman por defecto, y hay que correr java @user_jvm_args.txt -jar server.jar. Si tu Forge o NeoForge está en un hosting, revisa primero con qué comando arranca y si lee ese archivo, para no terminar con dos valores que se pelean.

El valor por defecto de Java puede ser bajo. Oracle documenta -XX:MaxRAMPercentage con un valor por defecto del 25 %, así que una JVM sin -Xmx puede quedarse con un heap de más o menos una cuarta parte de la memoria que detecta.

Solución 3: Java de 32 bits

Con Java de 32 bits en tu PC con Windows, el heap no pasa de unos 1.5 GB, pongas lo que pongas en -Xmx. Las notas de soporte de Oracle describen ese límite para los JDK de 32 bits en Windows. Escribe java -version: si la salida no dice 64-Bit Server VM, instala un Java de 64 bits y haz que tu script de arranque lo use. En servidores Linux de un hosting esto prácticamente no pasa.

Muchas veces el lag es de CPU, no de RAM

Un servidor de Minecraft avanza en ticks, 20 por segundo, y lo principal de cada tick corre en un solo hilo. Cuando un tick tarda más de 50 ms, el TPS baja de 20 y los jugadores sienten lag. Más RAM no hace más rápido ese hilo. Granjas de mobs, relojes de redstone, muchas entidades y una distancia de visión alta cargan la CPU; el perfilador de spark te dice cuál.

Si spark marca un heap sano pero el TPS sigue cayendo, más memoria no ayuda. Sigue nuestra guía para volver a 20 TPS en un servidor de Minecraft con lag para medir TPS y MSPT, y revisa los mejores mods para optimizar tu servidor de Minecraft si usas Fabric o NeoForge.

Por qué darle demasiada RAM no sirve

PaperMC es directo: más memoria no significa mejor rendimiento a partir de cierto punto, y comprar 32 GB para un servidor solo te hace gastar dinero con muy poca ganancia.

Dos reglas de la misma guía:

  1. Deja margen. Baja -Xms y -Xmx unos 1000–1500 MB por debajo de la memoria total disponible, porque Java necesita memoria fuera del heap. Su ejemplo: con 8 GB, usa 6500 MB.
  2. Nunca pongas -Xmx igual al límite completo. Si el heap más lo que Java usa por fuera pasa del límite, el sistema puede matar el proceso sin que veas ningún error de Java.

Si no sabes cuánta necesita tu mundo, nuestra guía de cuánta RAM necesita un servidor de Minecraft tiene puntos de partida según jugadores y tipo de servidor.

Memoria y lag en TheGameHosting

En TheGameHosting tu plan define el límite de memoria de tu servidor, de 2 GB a 64 GB de RAM DDR5, y el panel te muestra el uso de memoria en vivo en Console. Corre spark health show --memory, compáralo con tu plan y, si no cuadra, abre un ticket. El equipo de soporte responde 24/7 por chat, correo y tickets, en español y en inglés, y revisa el caso contigo.

Como el lag casi siempre es del hilo principal, la CPU importa tanto como la RAM. Nuestros nodos usan procesadores AMD 9950X y 7950X3D de hasta 5.7 GHz con almacenamiento NVMe, en Dallas y Amsterdam. Con Version Changer cambias a Paper o Purpur, en Files editas tus archivos de configuración y en Backups guardas una copia antes de mover algo. Todo lo que incluye está en la página de hosting de Minecraft.

Los planes empiezan en $1.90 USD al mes con 2 GB. Compara todos los tamaños en Precios, elige la RAM que necesita tu mundo y tu servidor queda listo en unos 60 segundos después del pago.

Preguntas frecuentes

¿Por qué mi servidor de Minecraft no usa toda la RAM?

Java agranda el heap solo cuando lo necesita y el recolector de basura libera memoria otra vez, así que ver poco uso es normal. Revisa el máximo del heap con spark health show --memory; si coincide con tu -Xmx, el servidor puede usar esa memoria cuando haga falta.

¿Cómo hago que mi servidor de Minecraft use más RAM?

Pon -Xms y -Xmx con el mismo valor antes de -jar en el comando de arranque. En Forge o NeoForge, ponlos en user_jvm_args.txt sin el #.

¿Más RAM quita el lag del servidor de Minecraft?

Solo si el heap de verdad es chico, y eso se nota en pausas largas de recolección o en un OutOfMemoryError. La mayoría del lag viene del hilo principal, así que perfila con spark antes de agregar memoria.

¿Por qué el panel marca más memoria que -Xmx?

Java usa memoria fuera del heap para datos de clases, hilos y búferes nativos. Por eso PaperMC recomienda dejar 1000–1500 MB de margen por debajo del límite total.

¿Por qué mi servidor Forge ignora el -Xmx?

Las instalaciones nuevas de Forge y NeoForge leen la memoria de user_jvm_args.txt, y la línea de ejemplo viene comentada. Quítale el # o revisa qué comando de arranque usa de verdad tu servidor.

¿Cuál es el límite de RAM de Java de 32 bits?

Una JVM de 32 bits en Windows normalmente no pasa de un heap de unos 1.5 GB. Instala Java de 64 bits; java -version debe decir 64-Bit Server VM.

Hosting para este juego

Escrito por el equipo de TheGameHosting, la gente que administra nuestros servidores en Dallas y Ámsterdam y responde tus tickets.

Todas las entradas