一部の JVM フラグにより​​バックグラウンド プロセスが予期せず停止する

一部の JVM フラグにより​​バックグラウンド プロセスが予期せず停止する

私は自宅で子供たちのためにローカル Minecraft サーバーを運用していますが、参加する人が増えるにつれて、遅延が問題になってきました...そして最近では、実際のゲームがクラッシュするようになりました (1 回のゲーム「ティック」に 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 フラグを追加すると、OS はバックグラウンドの 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 が起動し、ゲーム サーバーの初期化が開始されますが、その後突然停止します。OS は次のように報告します。[1] 停止

手動でフォアグラウンドに移動すると、通常どおり実行が再開されます (フォアグラウンドで起動した場合も正常に動作します)。バックグラウンドに戻そうとすると、プロセスは再び自動的に停止します。

しかし、同じコマンド文字列をノーフープすると、プロセスは期待どおりに動作します。つまり、ゲームの Java プロセスは実際にはバックグラウンドで実行されます。

カーネルや Java の専門家に質問ですが、バックグラウンドで起動されたときに OS がプロセスを停止する原因となっている JVM フラグは何ですか?

編集 - 追加情報

解析するといいえファイルでは、フォアグラウンドで 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

関連情報