MC Toolkit

ガイド / トラブルシューティング

終了コードはクラッシュの理由ではなく、ただの「お手上げ」だ

数字は何も語らない。その上の行がすべてを語っており、それはすでにログフォルダに入っている。「終了コード1」はプロセスの異常終了を示すだけで、原因はlatest.logやクラッシュレポートに書かれています。逆方向から読むのが近道です。

Exit Code 1 を出力して停止するJavaサーバー。メッセージはそれだけだ。終了コード1は「プロセスが異常終了した」という意味であり、原因ではなく分類にすぎない。ワールドフォルダの欠落から、クラスロード中に例外を投げるModまで、あらゆるケースがこのコードに含まれる。

本当の答えがある場所

終了コードを出力しているのはゲームではなく、ランチャーやホスティングパネルだ。原因は logs/latest.log にあり、クラッシュの場合はサーバーが crash-reports/ 以下に保存するレポートにもある。ログの末尾から逆方向に読み、最初の Exception、Caused by:、または Failed to に突き当たったらそこで止める。その行にクラス名、Mod名、またはファイル名が書かれている。

[Server thread/ERROR]: Encountered an unexpected exception
java.lang.NoSuchMethodError: net.minecraft.world.level.Level.getBiome
    at com.example.mod.ExampleMixin.inject(ExampleMixin.java:41)
Caused by: java.lang.NoClassDefFoundError: com/example/lib/Helper

ここでの NoClassDefFoundError は依存関係の欠落であり、ワールドの破損ではない。終了コードはそんなこと一切教えてくれなかった。

実際に目にする終了コード

コード通常の意味
0正常終了 — /stop またはスケジュールされた再起動
1ウォッチドッグが停止したティックを強制終了した、JVMが起動を拒否した、またはランチャーやModローダーがクラッシュを報告した
137OSによる強制終了。ほぼ常にOOMキラー
143SIGTERM — コンテナオーケストレーターによる停止

コード137は、人々がクラッシュと誤読しがちなものだ。JVMは失敗していない。プロセスがメモリを使いすぎたと、外部の何かが判断したのだ。

JavaとBedrockは同じ問題ではない

Bedrockの専用サーバーは別のプログラムであり、独自のログ形式を持つ。Javaのログ向けに書かれたアドバイスはそのまま当てはまらない。

Mod構成では失敗の仕方が異なる

Modを導入している場合、最初の例外はしばしば症状にすぎない。Mixinの適用失敗は連鎖を引き起こし、真の原因は最初の Mixin apply failed 行であり、30行後にある NoSuchMethodError ではない。Exception を検索する前に、ログ内で Mixin を検索しよう。

サーバーが起動しているかどうかの確認

ログはなぜ死んだかを教えてくれる。今生きているかどうかは教えてくれない。サーバーポートへのステータスクエリを使えば、1回のリクエストでそれがわかる。ここにあるツールはJavaサーバーをチェックする。BedrockはUDPで通信するため、専用のクエリが必要だ。

ログをサーバー診断ツールに貼り付ければ失敗行を抽出でき、ホストを指定すればサーバーが実際に応答しているかを確認できる。

サーバー診断 →

その他のガイド

すべて見る →