특정 JVM 플래그가 예기치 않게 백그라운드 프로세스를 중지합니다.

특정 JVM 플래그가 예기치 않게 백그라운드 프로세스를 중지합니다.

아이들을 위해 집에서 로컬 마인크래프트 서버를 운영하고 있는데 점점 많은 사람들이 참여할수록 렉이 문제가 되네요... 최근에는 실제 게임이 튕기는 현상이 발생합니다(한 게임의 "틱"이 60 이상 걸릴 경우) 초가 지나면 게임이 중단됩니다) JVM이 자동으로 종료됩니다.

권장되는 JVM 플래그 중 일부를 시도하면 커널이 백그라운드 Java 프로세스를 자동으로(그리고 조용히!) 중지합니다. 이유는 잘 모르겠습니다.

호스트는 Fedora 31을 실행하는 32GB RAM을 갖춘 쿼드 코어 i7(8스레드)입니다.

Java는 Oracle의 SE 런타임입니다.

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)

처음에 유효한 게임 시작 명령 문자열은 다음과 같습니다.

java -Xms2G -Xmx4G -server -XX:+UseG1GC -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false -jar minecraft_server.1.15.2.jar nogui &

성능을 최적화하기 위해 권장 JVM 플래그를 추가하면 운영 체제가 백그라운드 Java 프로세스를 자동으로 중지합니다.

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 &

원래 JVM 플래그 세트를 사용하여 독립적으로 테스트하여 XMS/XMX 변경 사항이 책임이 없음을 확인했습니다.

이 명령을 실행하면 JVM이 시작되고 게임 서버가 초기화된 후 갑자기 중지됩니다. 운영 체제 보고서:[1] 중지됨

수동으로 전경으로 가져오면 정상적으로 실행이 재개됩니다(전경에서 시작할 때도 제대로 작동합니다). 백그라운드로 되돌리려고 하면 프로세스가 자동으로 다시 중지됩니다.

그러나 다음을 사용하여 동일한 명령 문자열을 실행하면북면, 그러면 프로세스가 예상대로 작동합니다. 즉, 게임의 Java 프로세스가 실제로 백그라운드에서 실행되고 있습니다.

그래서 커널 및/또는 Java 전문가에게 보내는 질문은 '백그라운드 시작 시 OS가 프로세스를 중지하게 만드는 JVM 플래그가 무엇입니까?'입니다.

편집 - 추가 정보

구문 분석nohup.out파일에는 포그라운드에서 jvm 프로세스를 시작할 때 발생하지 않는 오류가 표시됩니다.

[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

관련 정보