19 votos

¿Cómo puedo ejecutar un servidor de Minecraft en varios núcleos de CPU?

Estoy trabajando en la creación de un servidor de Minecraft en una máquina que tengo en casa. Esta máquina en particular tiene dos CPUs de cuatro núcleos corriendo a 2.0Ghz así que me gustaría aprovechar el número de núcleos y correr un servidor con 4 o 6 de los núcleos. Mi servidor de elección es CraftBukkit, la última versión de la cual es craftbukkit-1.4.7-R1.0 y lanzado con un arranque script de:

"C:\Program Files\Java\jre7\bin\java.exe" -Xms1G -Xmx8G -jar craftbukkit-1.4.7-R1.0.jar"

El Wiki de Minecraft dice:

Los servidores de Minecraft, a partir de la versión 1.1.0, pueden utilizar varios núcleos, por lo que ahora no estarán inactivos.

pero no profundiza en ello.

Mis preguntas, entonces:

  • ¿Es posible establecer el número de núcleos que utiliza el servidor?
  • ¿Cómo lo hago, a través de las opciones de inicio o de otros métodos?
  • ¿Vale realmente la pena y supondría una gran diferencia con muchos jugadores?

1 votos

Creo que a partir de la versión 1.1.0 genera hilos para varias cosas, que naturalmente se repartirán entre varios núcleos. No creo que haya ninguna manera de pedirle que utilice más núcleos, ya que no está escrito para la ejecución paralela.

16voto

voithos Puntos 1901

Si utiliza el JDK en lugar del JRE, puede utilizar la siguiente línea de comandos para forzar al JDK a utilizar todos los núcleos disponibles para optimizar el propio Java ( fuente ):

-server -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=7 -XX:+AggressiveOpts -Xms1G -Xmx8G -jar craftbukkit-1.4.7-R1.0.jar

Como es evidente que usas Windows, ¿has pensado en YAMS? (Revelación completa: yo lo hice). YAMS hará todo esto por ti.

0 votos

Es la primera vez que oigo hablar del uso de YAMS: ¿es un panel de control como McMyAdmin y Multicraft, o algo que funcionaría junto a él, o algo más?

0 votos

@tombull89 Probablemente es lo más parecido a McMyAdmin (nunca lo he usado), pero YAMS funciona como un servicio y hace interfaces web y telnet. ¡Todo está en el sitio web, no quiero parecer spam!

0 votos

Suena bien, sin duda lo miraré (ejecutar Minecraft como servicio era una de las cosas que buscaba en algún momento).

3voto

Lex Puntos 61

Gracias por intentarlo hombre, pero un proceso en java necesita disparadores específicos para que un hilo se divida - tiene que ser codificado de esa manera.

Puede obtener algunos ejemplos prácticos aquí : https://beginnersbook.com/2013/03/multithreading-in-java/

Mientras que Minecraft tiene un soporte multinúcleo decentemente desarrollado en el lado del cliente, carece de él en el lado del servidor. Todo lo que esté por encima de 3 núcleos no se utilizará, a menos que las nuevas iteraciones introduzcan una cadena de bloques de comandos con división automática de hilos, haciendo que el código del servidor dedicado sea más escalable de lo que ha sido desde el lanzamiento.

1 votos

¿Cuál es su experiencia en cuanto a la diferencia de rendimiento al establecer la afinidad? La afinidad sólo permite dedicar potencia de procesamiento, lo que debería dar un pequeño impulso, pero no importa cuántos núcleos se le da afinidad con un programa, todavía puede utilizar sólo tantos núcleos como hilos tiene. Este método no hará que un programa utilice los núcleos adicionales con los que se le ha dado afinidad a menos que ya sea multihilo.

3 votos

Lo que has escrito sobre la CPU y la RAM parece ser engañoso. La CPU procesa datos (por ejemplo, actualizaciones de bloques, redstone, mob AI) y la RAM almacena datos (por ejemplo, trozos cargados, ubicación y velocidad de las entidades). Básicamente hacen cosas completamente diferentes.

0 votos

Gracias por detectar mis errores. Puede que no lo haya dicho, pero mi experiencia es tristemente muy limitada. No obstante, pido disculpas por haber confundido a alguien.

JugonesTop.com

Jugonestop es una comunidad para amantes del gaming. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X