退出代码不是崩溃原因,它只是一声无奈的耸肩
那个数字什么也说明不了。它上面那一行才说明一切,而那一行早就躺在你的日志文件夹里了。
一个 Java 服务器挂掉时会打印 Exit Code 1 然后停止。这就是全部信息。退出代码 1 的意思是“进程异常结束”——它是一个类别,不是原因,它涵盖的范围从缺失的世界文件夹到在类加载期间抛异常的模组,无所不包。
真正的答案在哪里
退出代码是 logs/latest.log 的最后一行。原因在它前面的那些行里。从末尾往前读,直到你遇到第一个 Exception、Caused by: 或 Failed to。那一行会指出出问题的类、模组或文件。
[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 拒绝启动 |
| 137 | 被操作系统杀死,几乎总是 OOM killer 干的 |
| 143 | SIGTERM——容器编排器把它停掉了 |
代码 137 就是那个常被误读为崩溃的。JVM 并没有失败;是它外部的某个东西认定这个进程占用了太多内存。
Java 和 Bedrock 不是同一个问题
Bedrock 的服务器会写入 bedrock_server.log,而且根本不输出 Java 风格的退出代码——它会转储一份崩溃处理报告,里面包含堆栈跟踪和一行 Crash report。为 Java 日志写的建议套不到它身上。
模组环境的失败方式不一样
装了模组之后,第一个异常往往只是症状。一个 mixin 应用失败会产生连锁反应,真正的元凶是第一个 Mixin apply failed 行,而不是三十行之后的那个 NoSuchMethodError。在日志里搜索 Mixin,再去搜 Exception。
检查服务器是否还活着
日志告诉你它为什么死了。它不会告诉你它现在是否还活着。对服务器端口做一次 TCP 检查,一个请求就能回答这个问题,而且对 Java 和 Bedrock 都一样有效,因为两者都通过套接字通信。
把日志粘贴到 服务器诊断 工具里,就能把出错的那一行提取出来,再把你的主机地址填进去,确认服务器是否真的在响应。