MC Toolkit

指南 / 故障排除

退出代码不是崩溃原因,它只是一声无奈的摊手

那个数字什么都说明不了。它上面那一行才说明一切,而那一行早就躺在你的日志文件夹里了,举例来说,退出代码 137 通常并不是崩溃,而是操作系统因为内存不足才强行终止了这个进程,并不是程序本身出了什么问题。

一个 Java 服务器挂掉时会打印 Exit Code 1 然后停止。这就是全部信息。退出代码 1 的意思是“进程异常结束”——它是一个分类,不是原因,它涵盖的范围从缺失的世界文件夹到在类加载期间抛异常的模组,无所不包。

真正的答案在哪里

退出代码是由你的启动器或主机面板打印的,不是游戏本身。原因在 logs/latest.log 里,如果是崩溃的话,还在服务器保存于 crash-reports/ 下的报告中。从日志末尾往前读,直到你遇到第一个 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看门狗杀死了卡住的 tick,JVM 拒绝启动,或者启动器或模组加载器报告了崩溃
137被操作系统杀死,几乎总是 OOM killer
143SIGTERM——容器编排器停止了它

代码 137 是常被人误读为崩溃的那个。JVM 并没有失败;是它外部的某个东西认定该进程占用了过多内存。

Java 和 Bedrock 不是同一个问题

Bedrock 的专用服务器是另一个程序,有它自己的日志记录方式,针对 Java 日志写的建议套不到它身上。

模组堆栈的失败方式不一样

装了模组之后,第一个异常往往只是症状。一个 mixin 应用失败会产生连锁反应,真正的元凶是第一条 Mixin apply failed 行,而不是三十行之后的 NoSuchMethodError。在搜索 Exception 之前,先在日志里搜 Mixin。

检查服务器是否在线

日志告诉你它为什么挂了。它不会告诉你它现在是否还活着。对服务器端口做一次状态查询,一个请求就能回答这个问题。这里的工具检查的是 Java 服务器;Bedrock 走 UDP,需要它自己的查询方式。

把日志粘贴到 服务器诊断 工具里,就能把出错的那一行提取出来,再把工具指向你的主机,确认服务器是否真的在响应。

服务器诊断 →

更多指南

查看全部 →