He estado ejecutando un servidor local de Minecraft para mis hijos en casa y, a medida que se unen más, el retraso se ha convertido en un problema... y últimamente, el juego falla (cuando un solo "tic" del juego tarda más de 60 segundos, el juego apaga automáticamente la JVM).
Experimentar con algunos indicadores JVM recomendados ha dado como resultado que el kernel detenga automáticamente (¡y silenciosamente!) el proceso de Java en segundo plano, y no estoy seguro de por qué.
La máquina anfitriona es una i7 de cuatro núcleos (8 subprocesos) con 32 GB de RAM que ejecuta Fedora 31.
Java es el tiempo de ejecución SE de Oracle:
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
Originalmente, la cadena de comando de inicio del juego funcional era:
java -Xms2G -Xmx4G -server -XX:+UseG1GC -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false -jar minecraft_server.1.15.2.jar nogui &
Al agregar los indicadores JVM recomendados para optimizar el rendimiento, el sistema operativo detuvo silenciosamente el proceso Java en segundo plano:
java -Xms10G -Xmx10G -server -XX:+UseG1GC -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=8 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=true -Daikars.new.flags=true -jar minecraft_server.1.15.2.jar nogui &
Verifiqué que los cambios XMS/XMX no eran responsables probándolos de forma independiente usando mi conjunto de indicadores JVM original.
Al ejecutar este comando, se inicia la JVM y el servidor del juego comienza a inicializarse y luego se detiene repentinamente. El sistema operativo informa:[1] Detenido
Puedo ponerlo en primer plano manualmente y reanuda la ejecución normalmente (también funciona bien cuando lo ejecuto en primer plano). Cualquier intento de devolverlo al fondo hace que el proceso se detenga automáticamente nuevamente.
Sin embargo, si ejecuto la misma cadena de comando usandonohup, entonces el proceso se comporta como se esperaba... es decir, el proceso java del juego realmente se ejecuta en segundo plano.
Entonces, mi pregunta para cualquier gurú del kernel y/o de Java: ¿qué hay en mis indicadores de JVM que hace que el sistema operativo detenga el proceso cuando se inicia en segundo plano?
EDITAR - Información adicional
Analizando a través delnohup.fueraarchivo, veo este error que NO ocurre al iniciar el proceso jvm en primer plano.
[04:12:38] [Server thread/INFO]: Starting minecraft server version 1.15.2
[04:12:38] [Server thread/INFO]: Loading properties
[04:12:38] [Server thread/INFO]: Default game type: SURVIVAL
[04:12:38] [Server thread/INFO]: Generating keypair
[04:12:38] [Server console handler/ERROR]: Exception handling console input
java.io.IOException: Bad file descriptor
at java.io.FileInputStream.readBytes(Native Method) ~[?:1.8.0_231]
at java.io.FileInputStream.read(FileInputStream.java:255) ~[?:1.8.0_231]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:284) ~[?:1.8.0_231]
at java.io.BufferedInputStream.read(BufferedInputStream.java:345) ~[?:1.8.0_231]
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) ~[?:1.8.0_231]
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) ~[?:1.8.0_231]
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) ~[?:1.8.0_231]
at java.io.InputStreamReader.read(InputStreamReader.java:184) ~[?:1.8.0_231]
at java.io.BufferedReader.fill(BufferedReader.java:161) ~[?:1.8.0_231]
at java.io.BufferedReader.readLine(BufferedReader.java:324) ~[?:1.8.0_231]
at java.io.BufferedReader.readLine(BufferedReader.java:389) ~[?:1.8.0_231]
at wd$2.run(SourceFile:110) [minecraft_server.1.15.2.jar:?]
[04:12:38] [Server thread/INFO]: Starting Minecraft server on *:25512
[04:12:38] [Server thread/INFO]: Using epoll channel type