子供のために自宅でローカルMinecraftサーバーを運営していますが、ますます多くの人が参加するほどレックが問題になりますね… )秒が経過するとゲームが中断されます)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