Minexa说明书
新手必看故障排查

小白看日志:30 秒抓住关键错误

满屏英文不用全看懂。找 Caused by、Exception、OutOfMemory、Address already in use 这几类词,就能定位大半问题。

服务端启动失败,终端里滚过几百行英文,最后停在一段看不懂的堆栈。大多数新手在这里做两件事:截图发群里问“这是啥”,或者干脆重装。其实你不需要读懂每一行,只需要找到那几行真正有用的。

看日志像看化验单:几十项指标,医生只盯几个箭头。日志里的“箭头”就是级别(ERROR、FATAL)、异常名(Exception),以及 Caused by 后面那句人话。

这一页教你看日志的骨架:先看哪里、找哪些词、往哪查。学会之后,大部分启动问题你能在 30 秒内判断方向。

本页要点
  • 先看最后 50 行,再找 Caused by,这是最快的两条路。

  • Caused by 后面那句才是根因,外层那句只说明“它失败了”。

  • 终端只显示最近 300 行,出问题先点「复制当前日志」留证据。

  • 服务端最终有没有 Done,是判断“还有没有救”的唯一标准。

日志从哪里看:四个位置#

先记一句话:出错那一刻用终端,事后复盘用文件。

位置看到什么适合什么时候用
终端页实时控制台输出,屏幕上最多 300 行启动中、刚崩、要发命令
服务端目录的 logs/latest.log本次运行的完整日志终端刷过去了,要慢慢翻
「更多 → 崩溃报告」摘要 + 关键片段 + 完整日志 + 原生报告异常退出之后、准备求助之前
「更多 → 运行诊断」环境检查结论,不是完整日志先确认 Java、存储、端口状态

Minexa 当前版本没有独立的日志页入口。如果你在别的地方看到“点概览的查看日志”,那个文字点不动,别找了;用上面这四个位置。

  • 终端:底部导航点「终端」,默认会话是「MC 控制台」。离开再回来日志还在,但超出上限的旧行会被折掉。

  • latest.log:「文件」页进 logs 目录点开即可。它只保留本次运行内容,重启就被覆盖。

  • 崩溃报告:点开有三个页签(摘要、原始报告、完整日志),摘要只是应用的判断。

先复制,再分析

终端右上角的「复制当前日志」复制的是当前会话全部显示内容,不受屏幕 300 行、单行 400 字符的限制。出问题先点它,粘到备忘录;重启服务端后旧内容就没了。

终端有汉化,但原文还在

中文界面下终端会显示成“中文摘要 + 原文:”,这层翻译只影响显示,latest.log 里永远是英文原文;对照时以原文为准。

一行日志长什么样:先看级别,再看内容#

以 Java 服务端为例,一行通常长这样:

文本
[12:34:56] [Server thread/INFO]: Starting minecraft server version 1.21.1

三段:[12:34:56] 是时间;[Server thread/INFO] 是线程和级别,Server thread 是主线程,它卡住整服就卡住;最后是内容——这行同时告诉了你服务端的真实版本。

级别只要认四个,其余忽略:

级别中文意思要不要管
INFO正常信息不用管,启动刷几十行很正常
WARN警告,还能跑反复刷同一条才要管
ERROR出错了要看,通常紧跟一段异常栈
FATAL致命错误,基本等于终止必须看,这次启动多半已失败

先看级别,再看内容。 满屏 INFO 通常没事;真正的问题是 ERROR、FATAL 和它们下面那段缩进堆栈。

抓关键词的五个位置#

日志可能上千行,但这五个位置含金量最高。一般看到第二、三个就有答案了。

位置 1:最后 50 行#

崩溃时真正的原因通常在最后一段输出里,而不是最前面。先看最后 50 行,找 ERROR、Exception、Caused by。

如果最后一行是 Closing Server、Stopping server,说明是正常关闭而不是崩溃——多半是你自己点了停止,或者某个自动化任务停了它。

位置 2:第一个 Exception#

堆栈可能很长,但第一个异常通常最接近根因。搜 Exception,从第一次出现处往下读三五行,一般能看出是版本、端口、文件还是模组的问题。

注意是“第一个”,不是“最长的那一个”:后面的异常常是连带反应。

位置 3:Caused by:#

Java 的异常层层包裹,外层只说“启动失败”,Caused by 才告诉你“端口被占用”:

文本
java.lang.RuntimeException: Failed to start the minecraft server
    at net.minecraft.server.Main.main(Main.java:123)
Caused by: java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)

看到 Caused by 往下多看两行,那才是能拿去搜的句子。

位置 4:启动阶段的 Done 之前#

启动失败时错误一定出现在 Done 之前。找到日志里最后一次出现的阶段词(Loading properties、Preparing level、Starting minecraft server),错误就在它附近——阶段词告诉你“它死在哪一步”,对照表在第六节。

位置 5:crash-reports/ 和 latest.log#

终端刷过去了就去服务端目录找:crash-reports/ 里最新的 .txt(形如 crash-2026-10-25_12.34.56-server.txt)是 Minecraft 自己写的崩溃报告,信息最全;没有它时看 logs/latest.log。用「文件」页的编辑器打开,别用会改编码的编辑器另存。

一张关键词对照表,照着查就行#

看到不认识的词先在这张表里找,找到就按“去哪篇”点过去。

看到这些词大概率是什么去哪篇
UnsupportedClassVersionErrorJava 版本太低或太高启动失败
Address already in use / Failed to bind to port端口被占用启动失败
OutOfMemoryError: Java heap space堆内存不足内存与 CPU
Missing or unsupported / Mod resolution模组缺失或版本不匹配模组冲突
NoSuchFileException / FileNotFoundException文件被删、路径不对目录结构
AccessDeniedException / Permission denied权限或存储问题启动失败
Invalid or corrupt / level.dat世界存档损坏崩溃与存档
Watchdog / Server thread 卡住主线程卡死,常见于死循环崩溃与存档
Invalid session / Failed to verify username正版验证或网络问题客户端报错
Unknown host地址解析失败,多半是地址打错客户端报错

更完整的索引见 日志关键词索引。同一句话在不同核心上写法略有差别,认关键词,别认整句。

三个真实场景,逐行拆给你看#

场景 A:Java 版本不对#

文本
java.lang.UnsupportedClassVersionError: net/minecraft/server/Main has been compiled
by a more recent version of the Java Runtime (class file version 65.0), this version
of the Java Runtime only recognizes class file versions up to 61.0

只看两个数字:65.0 是服务端要求的版本,61.0 是当前 Java 能支持到的版本。61 = Java 17,65 = Java 21。

结论:服务端要 Java 21,你在用 Java 17。去 运行环境管理 装 Java 21,再到启动设置抽屉选它。不要重装服务端,也不要换核心——换核心只会提高 Java 要求。

场景 B:端口被占用#

日志里出现两行就够判定了:**** FAILED TO BIND TO PORT! 和紧跟其后的 java.net.BindException: Address already in use。后面那句 Perhaps a server is already running on that port? 是服务端自己的猜测,可以直接跳过。

端口(同一台手机不同程序的“门牌号”)被别的进程占了。常见原因按频率排:上一个服务端没退干净、两个服写了同一个 server-port、改过端口没重启、别的应用占了它。

处理顺序:先用概览页确认是否已有服务端在跑,是就先停(必要时「强制停止」);还不行就改 server-port,或重启手机释放异常占用。改完记得同步隧道那边的目标端口。

场景 C:模组缺失#

文本
net.fabricmc.loader.impl.FormattedException: Mod resolution encountered an incompatible mod set!
A potential solution has been determined:
 - Install fabric-api, version 0.100.0 or later.

Fabric 算友好的:答案就在 A potential solution has been determined 下面——缺 fabric-api。按对应 MC 版本下载 Fabric API 放进 mods/,重启即可。

遇到 Mixin apply failed、Duplicate mod 这种只给一行结论的,按 模组冲突 用二分法一半一半地停用。

启动卡在哪一步:认阶段词,别被噪音骗#

新手最常误判“没看到 Done 就等于崩了”。其实要看阶段:进程活着、阶段还在推进,就不算失败。

阶段词它在做什么正常要多久
Loading properties读 server.properties一两秒;卡这里多半配置写坏了
Starting minecraft server version核心开始加载几秒到几十秒,顺带告诉你真实版本
Preparing level "world"生成或读取世界首次生成 1~3 分钟,之后更快
Preparing spawn area预生成出生点区块手机弱或世界大时会久,可以再等
Done (3.214s)! For help, type "help"启动完成,端口开始监听看到 Done 才算启动成功

判断方法很实用:看最后一行还有没有在变。有新阶段词就是在推进;五分钟没有任何新输出才算卡死。

这些日志可以不管#

  • 大量 INFO:正常加载信息,只是刷得快。

  • Can't keep up! Is the server overloaded?:TPS 掉刻提示,值得关注但不是崩溃。

  • Unknown recipe / Ignoring advancement:数据包或模组的兼容小问题,多数不影响进服。

标准只有一条:能不能连、有没有反复刷同一条 ERROR。

看日志时最容易卡住的两件事#

一、以为能搜索。 终端没有搜索框,颜色只是上色不是过滤;想搜关键词,只能「复制当前日志」粘到备忘录里搜。

二、以为滚动条里就是全部。 屏幕最多渲染 300 行,单行超过 400 字符会截断,更早的行只留在内存缓冲里(约 1500 行),重启后即消失。所以重要的段落要早点复制出去。

崩溃报告不会自动上传

它是本地文件,只有你点「分享」才会发出去。想让人帮忙,必须自己发。

怎么把日志发给别人#

只发一句“进不去”,别人没法帮你。按这个模板发,基本一轮就能得到有用回复。

文本
手机/系统:Android 版本 + 机型
Minexa 版本:见「设置 → 关于」
服务端:Paper 1.21.1 / Fabric 1.20.1 ...
Java:Termux Java 21
现象:点启动后 10 秒退出 / 卡在 Preparing level / 能进但朋友超时
改过什么:刚装了 XX 插件 / 改了 view-distance
日志:
(粘贴最后 50 行,或包含 Caused by 的那一段)

发之前确认:日志里带着 Caused by 那几行(只发最后一行往往没用),敏感信息处理掉。

发之前先删掉敏感信息

日志里可能出现公网地址、FRP 隧道 ID、令牌、玩家 UUID。发到公开群或论坛前把 token、IP、端口打码。

上机自查
  • 能在终端里指出最后一条 ERROR 或 Exception 出现在第几行。

  • 读懂了一个 Caused by:,能说出它后面的关键词。

  • 知道 logs/latest.log 在哪个目录,能自己点开。

  • 看到过 Done (...) 这一行,并知道它才代表启动完成。

  • 复制了一份完整日志,粘到备忘录里能正常读到文字。

下一步#

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

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