Minexa说明书
排错故障排查

崩溃与存档损坏:从报告到恢复

崩溃报告在哪、怎么看;世界损坏先备份再还原;哪些“崩溃”其实是被系统杀了。

服务器跑了两小时,你切回桌面回了条消息,再打开 Minexa,状态变成“未运行”。点启动,世界进不去,终端刷出一段英文堆栈。这是最让人慌的时刻,也是新手最容易把小问题搞成删档的时刻。

慌的时候最常做的三件事恰好都是错的:反复点启动、直接删 world 文件夹、用“存档修复大师”改原文件。反复启动会让服务端在半截文件上继续写,后两个会把还能救的数据彻底弄没。

下面按真实顺序来:先判断这算不算崩溃,再保住存档,最后才读报告、修文件。正卡在“世界打不开”的可以直接跳到「存档坏了:五种表现」。

本页要点
  • “突然没了”有四种:崩溃、被系统杀、正常退出、卡死。方向完全不同,别一律当崩溃处理。

  • 记牢这个顺序:先停手,再备份,最后才修。反过来做一次就可能删档。

  • 崩溃报告在「更多 → 崩溃报告」,读法是从 最后一个 Caused by: 往回看。

  • 世界还原没有二次确认,点一下立刻覆盖,还原前必须先自己备份一次。

  • 自动备份默认是关的(间隔 0),没开就等于没有备份。

先分清四种“没了”:崩溃、被杀、正常退出、卡死#

先给结论:只有真的崩溃才需要读崩溃报告。判断错方向,后面所有努力都白费。

现象本质有没有报告怎么确认
终端刷出英文堆栈后退出JVM 或核心真的崩了有,带 at ... 堆栈报告里能找到 Caused by:
界面回到桌面,状态自己变未运行被 Android 低内存杀手或厂商清理杀掉通常没有 Java 异常报告开头写 退出码: 137
你点了停止,或手机重启正常退出没有新条目报告列表里没有这次
显示“运行中”但玩家全掉线、终端不动主线程卡死,被看门狗终止有 Watchdog 片段日志出现 The server has not responded

应用是怎么判定“崩溃”的#

报告内容可能和你的直觉不一致。Minexa 不看日志里有没有 ERROR,只看两个硬条件:

  • 退出码不是 0 → 一律算异常退出,生成崩溃报告;

  • 退出码是 0,但退出发生在启动后 20 秒内 → 也算异常,因为“启动阶段就退出”不是正常结束;

  • 退出前 5 分钟内你点过停止 → 一律按正常停止处理,既不生成报告,也不自动重启。

所以“明明看到一堆红字,却没有崩溃报告”通常只有两种解释:进程被系统杀了(没走到 Java 异常),或者你刚点过停止。

退出码是什么

退出码是进程结束时留给系统的一个数字。0 表示“我自己正常结束”,非 0 表示“我出事了”。137 在 Linux 和 Android 上通常代表进程被强制杀死(信号 SIGKILL)。报告开头会把 137 解释成“通常表示 SIGKILL”,但那只是提示,137 不等于一定是内存不足,也可能是厂商省电策略直接干掉。

崩了先别点启动:三步保住现有存档#

崩溃后世界可能正处在“写了一半”的状态:区域文件只写了一半、level.dat 还没更新。这时候立刻重启,等于在损坏的文件上继续覆盖写。

  1. 确认真的停了:回「概览」,状态必须是“未运行”。如果还显示运行中但完全没反应,点「强制停止」——它有二次确认,确认后可能丢失未保存的数据。

  2. 先做一次整服备份:「更多 → 世界与备份」,在「外部备份」区点「备份整个服务器」。备份不会停服,不会动你现有文件。

  3. 再把世界单独留一份:同一页点「备份世界」;或去「文件」页把 world、world_nether、world_the_end 分别导出(目录会自动打成 zip)。

备份落在 /storage/emulated/0/世界与服务器的备份/,卸载也不会丢。第一次进这页会引导你授予“所有文件访问”,没授权时备份按钮是灰的。

还原点一下就开始,没有“确定吗”

世界还原和整服还原都没有二次确认:点下去立刻停服、立刻用备份内容覆盖当前世界。没有“确定吗”,也没有撤销键。顺序永远是「先备份,再还原」。整服还原成功后还会把旧目录直接删掉——连后悔药一起删。只有“目标目录重名”时会弹提示,那是冲突提醒,不是还原确认。详见 备份、还原与世界管理。

崩溃报告在哪,为什么有的是空的#

入口就一个:「更多 → 崩溃报告」,列表按时间倒序。报告有两个来源,这就是“为什么有两条”的原因:

  • 应用自建的:crash-logs/crash_yyyyMMdd_HHmmss.txt,异常退出时生成,含退出码、关键片段和最后 800 行日志;

  • 核心原生的:各服务端目录里的 crash-reports/crash-<日期>_<时间>-server.txt,由服务端自己写。

点开一条报告,里面有三个标签:

标签里面是什么什么时候看
摘要「退出码: N」、逐条 Caused by:、应用给的“标签 + 建议”先扫一眼,30 秒判断方向
原始报告核心写的那份原文摘要说“未能明确归因”时
完整日志本次运行的最后 800 行要贴给别人求助时

页面顶端有一句固定的红色提醒,值得照做:求助时不要只发摘要,直接把「完整日志」整段发出去。摘要里的结论是猜的,完整日志里才有上下文。

还要留意:「latest.log 不存在」说明服务端一次都没输出过,多半启动命令就没跑起来;「存在但为空」说明进程起来了立刻死了,方向在启动参数或核心文件上。

报告列表是空的,先别怀疑应用

「暂无崩溃报告」通常意味着这次退出没走到 JVM 层。别反复重装,去看概览页状态提示和「终端」最后一屏。终端最多显示 300 行、单行超 400 字符会截断,先点「复制当前日志」再慢看。见 终端与快捷指令。

读报告的顺序:别从第一行读#

堆栈几十行,按这四步读,两分钟能定位:

  1. 找最后一个 Caused by::异常层层包裹,最外层往往是“启动失败”这类没信息量的话,最后一个 Caused by: 才是根因。

  2. 找第一处带你插件/模组名字的 at ...:那是触发点。全是 net.minecraft.* 就说明是核心自身的问题,不是插件。

  3. 看异常类型:OutOfMemoryError、StackOverflowError、NoClassDefFoundError、Mixin apply failed,每一类对应完全不同的处理。

  4. 看时间点:启动时就崩,和跑了三小时才崩,是两种病。

报告里常见的形状(类名和行号每个人都不一样,只看结构):

日志
java.lang.OutOfMemoryError: Java heap space
    at net.minecraft.server.level.ServerLevel.tick(ServerLevel.java)
Caused by: java.lang.OutOfMemoryError: Java heap space

读法是:第一行说“堆内存用完了”,Caused by: 再确认一遍。结论不是“核心有 bug”,而是堆不够用或有人在泄漏,下一步去 内存不足与 CPU 占用过高。

常见崩溃:一眼对照#

报告里的原文片段真正的问题先做什么
OutOfMemoryError: Java heap space堆内存真的用完降视距、清实体,再考虑加 256 MB
OutOfMemoryError: Metaspace类元数据区满(上限固定 256 MB)减模组,别加堆
StackOverflowError递归太深,常见于模组互相调用卸掉最近加的模组
Mixin apply failed两个模组改了同一个游戏类其中一个换版本,或二选一
NoClassDefFoundError / NoSuchMethodError缺依赖,或依赖版本对不上看第一个异常涉及的 jar
The server has not responded for ... seconds看门狗判定主线程卡死,常见于实体/红石过多看 Server thread dump 卡在哪
Failed to load level / level.dat世界存档坏了见本页下一节
汉化只改显示

开了日志汉化,一行显示成「中文摘要 + 原文」。搜索和求助搜英文那半句。

存档坏了:五种表现,五个方向#

世界损坏不是一种病,先看日志怎么说,再决定动什么。

日志里的表现坏在哪还能救吗动作
Failed to load level + level.dat世界元数据损坏或丢失多数能救从备份还原;没备份只换 level.dat
Region file 报错 / 文件被截断单个 region/*.mca 写坏了常常能救只回滚那一个区域文件
Chunk file at ... is missing单个区块丢了能救备份后启动,会自动重新生成
世界能进,但地形切掉一块、箱子空了区块回档部分能救还原到损坏前时点的备份
卡在 Preparing level 后退出世界根本读不进去看上面四种先把整个世界导出留底再动手

不管哪一种,第一条动作都一样:先导出整个世界留底,再动任何文件。「文件」页的导出会把目录打成 zip,几分钟的事,却是唯一的退路。

抢救顺序:从备份还原(最稳的一条路)#

  1. 停服:概览点「停止」。它会发 stop 命令并最多等 180 秒;超时不会强杀,而是提示你可以点「强制停止」。

  2. 把当前状态再备份一次:哪怕它是坏的,你要靠它对比哪一步改坏了。

  3. 还原:「更多 → 世界与备份」→ 在外部备份列表里找时间最近、大小正常的那条 → 点「还原」。

  4. 立刻启动验证:终端出现 Done (…s)! For help, type "help" 才算成功,光看到“运行中”不算。

  5. 进游戏抽查:出生点、你最后待的地方、下界和末地各传送一次,三处都能进才算救回来了。

还原时应用会先把旧维度目录改名成 world.bak.<时间戳> 再解压;解压失败或解出来没有世界,它会删掉半成品并把 .bak 改回原名,即自动回滚。那些 .bak 是最后的后悔药,确认新世界没问题前别删。

没有备份时还能做什么#

按风险从低到高排:

  1. 先做原始副本:用「文件」页把整个世界目录导出到手机另一位置。后面所有操作都在副本上做,不碰原目录。

  2. 只换 level.dat:用同版本、同核心新建一个空服务器,拿它新生成的 level.dat 覆盖过来,region/ 等目录保持原样。代价是种子、世界名、游戏规则回默认值。

  3. 只回滚单个区域文件:region/ 里的文件名是 r.<x>.<z>.mca,坐标能从日志里读出来,只拿这一个覆盖回去最安全。

  4. --forceUpgrade(谨慎):Minecraft 通用做法——启动时加这个参数,让服务端尝试升级旧格式世界。Minexa 没为它做开关,要在启动设置里打开「使用自定义启动命令」自己写。它只对“版本升级后打不开”有效,对文件损坏无效,而且升级不可逆,只在副本上试。

  5. 第三方修复工具(不推荐新手用):这类工具大多直接改写原文件,第一次没修好,第二次连原始数据都没了。

别相信“一键修复”

你已经因为一次异常关闭丢了数据,再让来路不明的程序覆盖一次,通常就是彻底没了。要试,先把整个世界目录复制到别处,在复制品上试。

用低版本打开高版本世界,基本无解

用 1.16 的服务端去开 1.21 的世界,日志会说这个世界是“用更新的版本保存的”(newer version),然后加载失败。这不是修一下就好的损坏:新方块和新区块格式旧版读不懂。唯一干净的做法是换回原版本,或用升级前的备份。

防复发:现在就做的五件事#

做什么在哪做为什么能防住
打开自动备份(默认关闭、间隔 0),保留 10 份世界与备份 → 自动备份九成存档问题靠回滚就能解决
换核心、升大版本前整服备份同页「备份整个服务器」这几步最容易写坏世界
服务端运行时不要删、不要换世界目录—文件页的删除和编辑不检查服务端是否运行
模组/插件一次只加一个,看到 Done 再加下一个插件/模组页出问题立刻知道是谁干的
手机留至少 2 GB 空闲存储系统设置存储写满时存档可能只写一半

自动备份只在服务端运行时每 60 秒检查触发,且需要“所有文件访问”权限——服没开时不会帮你备份。运行中备份拿到的是“当时磁盘上的文件”,动大手术前先停服再备份。长期开服配合 备份策略。

上机自查
  • 概览状态是“未运行”,而且你已经做过至少一次整服备份。

  • 「更多 → 崩溃报告」里能找到这次退出,摘要里有一行「退出码: N」。

  • 你能说清这次是崩溃(有 Caused by:)还是被杀(退出码 137、没有 Java 异常)。

  • 服务端目录里如果出现 world.bak.<时间戳>,你还没有删它。

  • 重启后终端出现过 Done (…s)! For help, type "help",不是停在 Starting server。

  • 自动备份的间隔不是 0,或者你清楚知道自己没开、并在手动备份。

下一步#

读到这儿了,给你点个赞。如果这页内容帮你解决了问题,说明说明书的方向是对的;如果发现错误、过时信息或看不懂的地方,欢迎到 GitHub Issues 告诉我们。

⚡ 回到极速开服 📖 查术语表