你装了三个“优化插件”,把内存从 1024 调到 3072,视距砍到 6,还下了个 Chunky 准备预生成。折腾一下午,服务器每天下午照样开始卡,手机背面烫得放不住手。
问题多半不在你做得不够多,而在顺序:先把手机烫到降频,再去调配置,等于一边踩油门一边拉手刹。这一页给一套按“收益 ÷ 成本”排好序的清单,从上往下做,每一步都能验证有没有用。
整套流程有个固定顺序,记住这一句就够了:先免费的后花钱的,先能退的后难退的。做完一遍,大多数手机服能从个位数 TPS 回到 18 以上。
顺序:先视距 → 再内存 → 再清实体红石 → 最后才换核心。
发热降频比配置写错更常见,卡的时候先摸手机背面。
插着电开服,但别在充电时开着省电模式,它会压 CPU 频率。
每 1~2 天重启一次,能清掉累积的实体和碎片。
手机可用空间留 2 GB 以上,世界和备份都要写盘。
优化顺序:先做不花钱的#
| 顺序 | 做什么 | 收益 | 代价与风险 |
|---|---|---|---|
| 1 | 散热与供电:取壳、通风、插电、关省电 | 大,决定会不会降频 | 无,随时可做,随时可退 |
| 2 | 视距与模拟距离 | 大,区块数按平方下降 | 玩家视野变近,远处区块静止 |
| 3 | 内存上限 | 中,减少 GC 和“被系统杀掉” | 给太多反而先被杀 |
| 4 | 实体、红石与插件模组 | 中,去掉每刻都在跑的东西 | 功能变少 |
| 5 | 世界预生成 | 中,把跑图时的卡顿提前挪走 | 时间和存储,生成期间很烫 |
| 6 | 其他:清实体、换核心、换设备 | 小到中 | 有的会改变玩法,有的要花钱 |
排这个顺序的理由很朴素:前两项不花钱、能回退、当场能看出效果;插件和预生成要动你的内容;换核心和换设备最贵,而且一旦不满意很难退回去。别从最贵的一项开始。
第一件:散热、供电和省电#
手机服的性能上限,很多时候不是 CPU 算不动,而是它被热到降频了。
SoC 温度到阈值就会降主频(thermal throttling)。主频一降,每刻耗时变长,TPS 往下掉;温度降下来再恢复。表现出来就是:刚开服很顺,一小时后开始卡,把手机放凉十分钟又好一点。这就是“越玩越卡”最常见的原因,跟你装了什么插件基本无关。
要做的事就四件:
插着电开服。 长时间跑服务端是个持续负载,靠电池放电撑不住,系统还会为了省电进一步压性能。
把热散出去。 取掉厚保护壳,别叠放、别压在枕头或被子里、别放床上 —— 床垫最不透气,还容易堵住背面。放桌面、瓷砖、金属架上,避开阳光直射和车里。
关掉省电和后台限制。 插着电也把省电模式关掉:省电模式会限制 CPU 频率和后台活动,不会因为你插了充电器就自动退出。再把 Minexa 加进电池优化白名单。保活页的「去设置电池优化」只是把你送到系统页面,需要你自己点确认,详见 后台保活。
少开后台。 相机、导航、视频通话、大型游戏都在抢 CPU 和内存;屏幕常亮方便看状态,但屏幕是手机上最大的发热源,长期挂机建议关掉。
卡的时候先摸一下手机背面。烫得握不住,八成已经在降频了 —— 这时候去调插件、加内存都没用,先让它凉下来再测。放凉之后立刻恢复流畅,基本就能确认是热的问题,而不是配置写错了。
第二件:视距和模拟距离#
这是手机服性价比最高的一次改动,理由在 视距与模拟距离 里详细算了:视距每加一格,区块数按平方增长。
| 手机内存 | view-distance | simulation-distance |
|---|---|---|
| 4 GB | 6~8 | 6 |
| 6 GB | 8 | 6~8 |
| 8 GB | 8~10 | 8 |
改完必须重启服务端(先停止再启动),一次降一格,降完玩一轮再决定。模拟距离别小于 4,不然农场和刷怪塔会大面积停摆。
第三件:内存#
内存的坑和专业说法都在 内存分配,这里只留三条能直接用的规则:
不要超过设备标称内存的 60%。4 GB 手机给 1024~1536 MB,6 GB 给 1536~2048 MB,8 GB 给 2048~3072 MB。
一次只加 256 MB,跑一晚上再决定。加太多,先被杀的是整个 Minexa 进程,而不是服务端报一个干净的
OutOfMemoryError。只改「JVM 内存上限」这一项。Minexa 只设
-Xmx,不设-Xms,也不要抄 PC 教程里的 Aikar Flags —— 那是给几十人 PC 服调的,参数还不一定被你的 Java 版本认。
第四件:插件、模组和实体#
到这一步才开始动内容。方法是一半一半地排除:
记录基线:改之前先玩 20 分钟,记下 TPS、内存占用和体感(谁在跑图、几个人在线)。
停掉一半插件:在 插件与模组 页逐个停用,或者先把 jar 移出目录,然后重启服务端。
用同样的场景再玩 20 分钟:还是那几个人、还是跑图。有明显改善,问题就在停掉的那一半里;没有改善,就换另一半。
锁定到单个插件后:先看它有没有新版本,再考虑换替代品或者干脆不用。
几个容易踩的点:
“优化插件”不一定在优化。 那种每刻扫描全服实体、定时清理掉落物的插件,本身就在制造负载。有些还和别的插件互相打架。
反作弊和统计类插件有固定成本,人越多越贵。小服不必上全套。
spark 需要你自己装。 它不是 Minexa 自带的功能,装完重启,用它的命令采样,才能看到到底是哪一类东西在吃每刻时间。
实体是有上限的。 掉落物、动物、盔甲架、展示框、矿车、船,几千个就开始拖慢每刻。刷怪塔和高频红石是重灾区。
漏斗和刷怪笼是隐形负载。 每个漏斗要定期尝试吸取物品,成排的漏斗、漏斗矿车和自动分类系统在人多时会明显吃掉每刻时间;刷怪笼附近挤着的怪物,寻路也是每一刻都在算。
/reload 修一切装完插件、改完配置,用 /reload 重载看起来省事,但它会让插件在没重新初始化的状态下继续跑,状态容易错乱,症状往往是“重载之后某个功能半死不活”。
正确做法是停服再启动。装插件、改 server.properties、换世界,都需要真的重启一次。
第五件:预生成世界#
玩家第一次走到某个坐标,服务端要现场生成地形:算噪声、放结构、定生物群系。这是单刻耗时尖峰最常见的来源,也是“有人一跑图全服就卡”的元凶。
预生成就是把这件事提前做完,跑图时服务端只需要从磁盘读,不用现算。它不能消灭卡顿,只能把卡顿挪到你不在玩的那几十分钟。
工具要自己装。 Chunky 是最常用的预生成插件,Minexa 不带,从插件页装或者上传 jar,装完重启,在控制台按它的用法指定世界和半径。
代价一:时间。 手机上生成上万个区块通常要跑几十分钟以上,具体看 CPU 和散热;期间别玩、别同时备份。
代价二:存储。 生成结果写在
world/region/下,体积随半径平方增长,几百 MB 到几 GB 都常见。先看手机剩多少空间。代价三:发热。 预生成是持续满负载,务必插电、放通风处,最好挑晚上做。
半径别贪。小服的常用活动区通常 1000 格以内就够(约 62 个区块的半径),想宽松一点可以做到 1000~2000 格。一上来就打 5000,手机多半会先因为过热降频,跑得比现生成还慢。
Paper 系自带的配置文件,建议先别动。 Paper 会在服务端目录里生成自己的配置(paper-global.yml、paper-world-defaults.yml),里面的键名和默认值随版本变化,抄攻略很容易写出当前版本不认识的键 —— 这种错误通常不报错,只是静默无效,你以为调过了。真要动,先备份整个服务端目录,一次改一项,改完看启动日志有没有警告,并且以你目录里实际生成的文件和 Paper 官方文档为准。
第六件:日常维护(重启、存储、后台)#
前面五件是把性能“调上去”,这一件是让它别一直往下掉。
定期重启。 服务端跑久了,掉落物、动物、内存碎片会缓慢累积,模组服更明显。表现出来的就是“开服第一天很顺,第三天开始卡”。做法很简单:每 1~2 天停一次、再启动,挑没人在线的时候做。重启要正常停止,不要用强制停止,前者会发 stop 让服务端存盘,最多等 180 秒;后者会丢未保存的数据。如果嫌麻烦,可以用自动化定时执行,见 自动化任务。
留足存储。 世界、logs/、备份和预生成结果都在吃空间。可用空间低于 1 GB 时,写区块和做备份都可能失败,最坏的情况是存档写了一半。建议长期留 2 GB 以上:先把手机里没用的视频和安装包清掉,再考虑加大预生成半径。备份体积大致等于世界体积,见 备份策略。
别让后台抢资源。 除了保活设置,还要注意别在开服时同步网盘、下载大文件、跑系统更新。
几件能省一点的小事:
实体同步范围:
server.properties高级配置里的「实体广播范围」entity-broadcast-range-percentage,默认 100。调低能减少实体数据的发包,代价是远处的怪物和玩家动起来会“定住”。链式邻居更新上限:
max-chained-neighbor-updates,默认 1000000,用来防极端红石电路造成的连锁更新。调低有效,但会改变红石行为,不懂红石就别碰。掉落物清理:
/kill @e[type=item]只清掉落物,比一键清所有实体安全得多。后者会连村民、宠物、盔甲架一起清掉。换核心:Paper 系之间换(比如 Spigot → Paper)通常有收益,但别指望它治好一个插件堆出来的服。换之前先备份。
怎么验证到底有没有变快#
优化最容易变成“感觉快了”。想真的知道有没有用,就固定变量:
| 项目 | 怎么固定 |
|---|---|
| 场景 | 同一个世界、同一个出生点,或者同一条跑图路线 |
| 人数 | 至少 2 人,别一次 2 人一次 6 人 |
| 时段 | 同一时间段,别拿晚上和白天比 |
| 时长 | 每轮至少 20 分钟,包含一次跑图 |
| 改动 | 一轮只改一项 |
记录方式很简单:改之前记 TPS / 内存 / 手机烫不烫,改之后记同样三项。TPS 的读法和目标值在 TPS 与 MSPT,内存条的含义在 内存分配。
如果某一项改完毫无变化,别硬扛 —— 说明瓶颈不在那里,回去看 TPS 与 MSPT 里“三种卡”的区分:甚至可能根本不是服务端的问题。
概览 TPS 稳定在 18 以上,不再是一阵一阵地掉。
玩一小时之后摸手机背面,没有烫到握不住。
概览内存条没有长期贴在 100%。
手机可用空间还有 2 GB 以上。
能说出自己最后一次重启是什么时候,以及是不是正常停止的。
改过的东西都只改了一项,并且记下了改之前的数据。
下一步#
指标看不懂:TPS 与 MSPT
两个距离的细节:视距与模拟距离
锁屏后被系统杀掉:后台保活