你在概览页点了「启动」,状态变成“运行中”,进度条停在「创建世界」,终端一行行往上滚。三分钟过去了,朋友还是进不来——你开始怀疑它到底是在干活,还是已经卡死了。
想判断这件事,不需要懂 Java,只需要知道服务端启动时按固定顺序做几件事,而且每件事都会在日志里留下痕迹。知道顺序,你就能一眼看出它卡在哪一步;不知道顺序,就只能看着黑底白字干等,然后在“是不是要重装”里反复摇摆。
下面按顺序讲:服务端到底在算什么、启动链上的八步、Done 的含义、第一次为什么慢、停止时又发生了什么。
服务端是个每秒循环 20 次(tick)的程序,它只和客户端交换“发生了什么”,不传世界本身。
启动链固定八步:检查 → 运行时 → 配置 → 世界 → 端口 → Done,前一步没过就不会有下一步。
看到
Done才算启动成功,状态显示“运行中”只代表进程活着,可能还在生成世界。第一次启动要 1~3 分钟(装环境、下依赖、生成世界),之后十几秒就完成。
停止要发
stop让它自己存盘退出,最多等 180 秒,别直接杀进程。
先理解:服务端是一个“一直在算”的程序#
客户端(朋友打开的游戏画面)负责渲染画面和接收操作,服务端负责一切规则:怪物怎么刷、方块怎么变、谁在挖什么、世界长什么样。两者之间只传“发生了什么”,不传世界本身——所以朋友看到的画面,永远是他自己的客户端根据服务端消息画出来的。
服务端跑起来后,以每秒 20 次的节奏循环推进,这个节奏叫 tick(游戏刻,可以理解成服务端的心跳,20 tick = 1 秒)。实际每秒能跑完多少刻就是 TPS,20 是满分;掉到 15 以下,玩家就会感到卡顿、怪物瞬移、方块挖了不掉。
世界也不是整块装进内存的,而是切成 区块(16×16 方块的竖条,一个区块从基岩一直通到天空)。服务端只加载玩家附近的区块,远处的卸载掉。所以第一次进服时你会看到“正在生成地形”——那些区块之前根本不存在,是这一刻才被你踩出来的。
世界数据在内存里改,然后定期写回磁盘(自动保存)。这是理解后面所有“别直接杀进程”的前提:进程活着的时候,内存和磁盘可能不一致,最近几分钟的改动还没落盘。
从点启动到 Done,中间发生八件事#
应用先做检查:有没有选核心、运行环境装没装、内存值在不在 256–65536 MB 之间、核心要求的运行环境和当前选的是不是同一种。不通过就直接拦下,不会启动。
拉起运行时:Termux 兼容环境、PRoot 容器或 PHP。这是服务端脚下的“地基”,它先起来,Java 才有地方跑。
拼出启动命令并执行:Java 系核心本质上是
java -Xmx… -jar server.jar nogui;Forge 用unix_args.txt,PocketMine 执行PocketMine-MP.phar。命令里的-Xmx就是你设的「JVM 内存上限」。核心读配置:Java 系读
server.properties(端口、MOTD、正版验证、视距都在里面);PowerNukkitX 读pnx.yml,Allay 读server-settings.yml。生成或加载世界:第一次是生成出生点附近的区块,之后是读已有的
world/。日志里会出现Preparing level "world"。绑定端口:向系统申请监听 25565(Java,TCP)或 19132(基岩,UDP)。这一步失败就是端口被占用。
打印
Done:所有插件加载完、世界就绪、端口已经在听,控制台输出那一行。开始接客:这时玩家连接才会被接受,之前连过来一律超时或被拒绝。
这八步里,第 2、3 步出问题表现为“点了没反应”或“闪退”,第 4、5 步出问题表现为“卡住不动”,第 6 步出问题表现为一句明确的报错,第 7 步之后才轮到网络问题。先用现象定位到步,再去查原因,比从头重装快得多。
Done 那一行到底代表什么#
[12:03:41] [Server thread/INFO]: Starting minecraft server version 1.21.4
[12:03:44] [Server thread/INFO]: Preparing level "world"
[12:03:47] [Server thread/INFO]: Done (3.214s)! For help, type "help"三行的意思是:核心版本起来了 → 开始加载世界 → 世界加载完成、端口已经在听、可以进了。
括号里的 3.214s 是从加载世界到就绪的耗时,不是“启动总共用了多久”;前面还有环境、JVM、核心初始化的时间。
要记住一条:看到 Done 才算启动成功。概览页显示“运行中”只说明进程活着,可能还停在生成世界。这时候让朋友连,他只会看到“连接超时”,然后你会以为是网络问题,白折腾半小时。
概览页会在启动期间显示阶段进度(「启动中」「创建世界」「监听端口」这类),这些阶段是应用从日志里读出来的,不是它自己编的进度条。不想看可以点启动卡右上角齿轮,打开「跳过启动中进度」,它就不显示阶段,直接按运行中显示。日志本身在 终端与控制台 里看。
世界和配置文件是什么时候出现的#
很多人以为下载完就有 world/、server.properties、logs/,其实这些都是核心在启动过程中自己创建的:第 4 步写下 server.properties 的默认值,第 5 步才生成 world/,从第 3 步起往 logs/ 里写日志。
所以会出现两个“看着像故障”的正常现象:
刚下载完、还没启动过的服务器,配置页可能一片空白,端口也改不了——因为文件还不存在;
第一次启动的终端里没有任何“已保存”字样,只有一路生成地形——因为世界是新建的。
文件各自的作用和能不能删,集中写在 服务端目录结构与文件说明。
第一次为什么慢,第二次为什么快#
同样一个 Paper 服,第一次可能要 1~3 分钟,之后十几秒就 Done。差在四个地方:
| 阶段 | 第一次启动 | 之后启动 |
|---|---|---|
| 运行环境 | 要初始化约 50 MB 的 Termux 兼容环境 | 已就绪,直接用 |
| Java | 要下载并安装几百 MB 的 JDK | 已安装,直接调 |
| 核心依赖 | Fabric / Forge / NeoForge / Quilt 要先拉 libraries 依赖 | 已存在,跳过 |
| 世界 | 生成出生点附近区块,视距越大越久 | 直接读盘,几十秒内完成 |
所以“第一次慢”不是故障。真正需要担心的是第二次、第三次依然慢,或者同一个世界每次启动都卡在同一行——那说明有东西在反复重试,通常是依赖下载失败,或者某个模组在报错。
一个粗略的时间基准:干净的 Paper 服冷启动,环境装好之后一般在 20~60 秒内出 Done;超过 5 分钟没有任何新日志,才值得按卡死处理。
EULA 和配置文件是谁写的#
Minecraft 官方要求接受 EULA(最终用户许可协议)才能开服。原版服务端的做法是:第一次启动时生成 eula.txt,然后在控制台停下,等你自己改成 eula=true 再启动。
在 Minexa 里这一步被提前了:下载或导入服务端时,如果目录里没有 eula.txt,应用会直接写入 eula=true。所以你不会看到任何询问窗口,也不会卡在“请同意 EULA”那里。
写入 eula=true 相当于替你表达了同意:下载或导入服务端的动作,就代表你接受 Minecraft EULA。之后你若手动把它改成 false,应用不会改回来,服务端会拒绝启动,终端里显示“未接受 Minecraft EULA,服务端无法启动”。
server.properties 则完全由核心生成,应用不预写端口。所以端口这种东西以文件为准:你在「服务器配置」页改了 server-port,保存后要重启才生效;如果文件里的值和界面显示的不一致,一律以文件为准。改法见 服务器配置页。
停止的时候发生了什么#
点「停止」不是“关掉窗口”,而是向控制台发送 stop 指令,等同于你在游戏里敲 /stop。服务端收到后会做一串收尾:
停止接收新连接,踢出在线玩家;
把所有加载中的区块和玩家数据写回磁盘;
关闭监听端口,退出 JVM;
进程结束,状态变回“未运行”。
Minexa 会等这个过程,最多等 180 秒。180 秒还没退出,它不会帮你强杀,而是提示“服务端仍在关停中,可点「强制停止」立即结束”。是否强杀由你决定。
「强制停止」会立刻结束进程,内存里还没写回磁盘的世界数据直接丢失:轻则回档几分钟,重则 level.dat 或区块文件写到一半损坏,世界打不开。
判断标准很简单:只要还能等,就用「停止」等它自己退。只有确认卡死(比如十分钟没有任何日志输出)时才用强制停止,事后检查世界能不能正常加载。
另外两件事容易误会:
没有「重启」按钮。改完配置想生效,要先点「停止」,等它真的退出,再点「启动」。运行中直接改配置不会生效。
崩溃自动重启默认是关闭的。打开后最多连续重试 3 次,间隔 3 秒、6 秒、12 秒,这是给“偶尔被系统杀一次”准备的,不是给“每次都崩”准备的。
卡住了,按阶段定位#
对照现象找阶段,再按最后一列去看:
| 现象 | 卡在哪一步 | 先看哪里 |
|---|---|---|
| 启动按钮是灰的 | 第 1 步检查没过 | 概览启动卡的提示、Java 运行环境卡 |
| 点启动后几秒就退出 | 第 2~3 步,运行时或命令出错 | 终端第一屏输出、崩溃报告 |
| 一直停在“创建世界” | 第 5 步,世界生成或加载 | 终端最后 20 行、磁盘剩余空间 |
报 Address already in use | 第 6 步,端口被占用 | 换端口或关掉占用它的程序 |
有 Done 但朋友进不来 | 第 7 步之后,纯网络问题 | 地址、是否同一 Wi-Fi、正版验证 |
第 4 步之前的问题(环境、Java、命令)几乎都会在 30 秒内暴露;卡在第 5 步通常是世界太大、磁盘满了、或模组死循环。排查步骤见 启动失败:卡住、闪退、迟迟不出 Done,判断 Java 版本够不够见 游戏版本与 Java 版本。
终端里出现过
Done (...s)! For help, type "help",不是停在Starting server。服务端目录里已经出现
world/、server.properties、logs/latest.log三样东西。概览「当前运行环境」显示的是你想用的那个来源和版本,不是默认值。
点「停止」后状态能自己回到“未运行”,没有用到「强制停止」。
知道改完
server.properties必须重启才生效。
下一步#
想知道每个文件的作用:服务端目录结构与文件说明
已经卡住了:启动失败:卡住、闪退、迟迟不出 Done
想看日志但不知道看哪:终端与控制台