Minexa说明书
排错故障排查

内存不足与 CPU 占用过高

OOM 有三种、CPU 高有六类原因;先判断是哪一种,再决定加内存、换核心还是删模组。

服务器玩着玩着卡成幻灯片,或者干脆崩出一段 OutOfMemoryError。绝大多数人的第一反应是“内存调大”,但内存和 CPU 是两条不同的线:调错了,卡顿不会消失,反而可能让系统更早把服务端杀掉。

还有一种更容易搞错的情况:手机烫了、电量低了,系统自动降频,服务端什么都没做错,TPS 却一路往下掉。这时候你去加内存、删插件,全是白费。

这一页只做一件事:帮你判断现在到底是内存问题、CPU 问题,还是两者都不是。判断对了,处理动作通常只有一两个。

本页要点
  • 先看两个数字:概览的内存条和 TPS。TPS 满分 20,低于 18 才开始能感觉到卡。

  • 内存上限不是越大越好,不要超过手机可用内存的 60%,否则系统会先杀掉服务端。

  • OOM 有三种:Java heap space、Metaspace、GC overhead limit exceeded,处理方向各不相同。

  • 没有 OOM、进程直接消失的“崩溃”,是被系统杀的,加内存只会让它更早发生。

  • 越玩越卡、还发烫,先怀疑降频,不是服务端的锅。

先看两个数字,再决定查哪边#

打开「概览」,看两处:

  • 内存条:格式是「已用 / 上限」,上限就是你设的 JVM 内存上限(-Xmx)。未运行时显示 -- / 上限。

  • TPS:服务器每秒能完成多少个游戏刻,满分 20。低于 18 就会开始有感觉,掉到 10 以下基本没法玩。

再看手机本身:是否插着电、机身烫不烫、后台还有没有别的应用、最近有没有装新插件/模组/新地图。这四条能解释掉一半的“莫名其妙变卡”。

名词:堆内存和 TPS

堆内存是 Java 服务端放游戏对象的那块内存,由 -Xmx 限定上限,满了就 OutOfMemoryError。TPS(ticks per second)是服务端每秒能跑完多少个游戏刻,20 是满分;它掉下来,玩家看到的就是方块回弹、怪物瞬移、开箱子要等半秒。

“卡”有三种,先问清是哪一种#

玩家说“卡”,可能是三件完全不同的事。分不清就动手,等于蒙着眼睛修车。

玩家的说法真实原因怎么确认
方块回弹、怪物瞬移、挖了不掉服务端 TPS 低概览的 TPS 低于 18
走路一顿一顿,但挖方块立刻有反应客户端帧率低别人不卡、只有他卡
开箱子要等、聊天延迟、进服转圈久网络延迟/丢包TPS 正常,只有远程玩家卡

第一种归这一页管;第二种让对方调客户端画质和视距;第三种去看 联机排错。先分清,再动手,这比任何优化都省时间。

内存问题:三种 OOM,方向完全不同#

报错含义常见原因处理
Java heap space堆内存用完人数多、视距大、实体多、泄漏降视距、清实体,再加 256–512 MB
Metaspace类元数据区满模组多、动态生成类多减模组;加堆没用
GC overhead limit exceededGC 花太久却回收不出空间堆太小,或对象几乎都活着查泄漏,再考虑加内存

堆内存 OOM:最常见,也最容易调错#

如果内存条长期贴着上限、TPS 同时下降,加内存通常有效。但要守住两条:一次只加 256 MB,并且上限不要超过手机可用内存的 60%。具体到机型的推荐值见 内存分配。

如果内存条根本没满就 OOM,或者刚启动就 OOM,那不是“给少了”,而是别的问题:

  • 新装模组/插件之后开始:先卸掉它,八成是它一次性加载了太多东西;

  • 世界很大、一有人进服就 OOM:预生成地图或降视距,别急着加内存;

  • 实体和掉落物堆积:清一遍实体,检查刷怪塔、漏斗、掉落物没被捡走的地方。

看趋势,不只看一个数字

内存条是「已用 / 上限」,重点不是某一刻的读数,而是它的走势。每两三分钟瞄一眼:

  • 涨上去又掉下来(锯齿状)→ 正常的 GC 循环,不用管;

  • 一路缓慢上涨,GC 后也回不去→ 典型的泄漏,先怀疑最近装的模组/插件;

  • 一开服就贴着上限→ 是给少了,按 256 MB 一档往上加。

观察时别一边看一边改配置:-Xmx 是启动参数,改完必须重启才生效,运行中在启动设置里是改不动的。

Metaspace OOM:加堆内存没用#

-Xmx 管不到 Metaspace。Minexa 启动 Java 服务端时把 Metaspace 上限固定成了 256 MB,界面上不能调。所以遇到 OutOfMemoryError: Metaspace,唯一有效的方向是减少模组和动态类数量,给再多堆内存也不会好转。

被系统杀:没有 OOM 的那种“崩溃”#

服务端直接消失、崩溃报告是空的、日志里没有任何 Java 异常——这是被 Android 的低内存杀手(LMK)或厂商清理杀掉了。此时加内存只会让系统更早动手,因为你要的内存本来就不存在。

按顺序检查:

  • JVM 内存上限是否超过了设备内存的 60%;

  • 是不是锁屏之后一段时间才消失;

  • 电池优化有没有关掉、有没有开省电模式;

  • 后台是不是还挂着游戏、浏览器、视频。

对应处理在 后台保活,那里讲了哪些能改、哪些只能靠系统放行。

CPU 高:先分清整机忙还是单核忙#

手机 CPU 是手机服的真正瓶颈,尤其是单核性能。Minecraft 的主逻辑基本跑在一个线程上,所以八核手机也不会因为核多就变快——这点和电脑玩家的直觉相反。

还有一种“看起来是 CPU 问题”的情况:手机发热降频。表现为开服前 20 分钟很流畅,之后越来越卡,摸上去烫手,插着电也不见好。这时候看 TPS 会看到缓慢下滑,但内存条很平稳。先降温、摘掉厚壳、别边充边玩,比改任何配置都有效。

没有内置的性能分析器

Minexa 不提供 CPU 火焰图或 tick 明细。要精确定位到某个插件/模组,得自己装 spark 这类工具用它自己的命令采样——这属于通用 Minecraft 运维,不是应用功能。不想装工具也有办法:用二分法卸一半插件,看卡顿是否消失,再逐步缩小。方法在 模组冲突与插件报错。

TPS 低的六类原因#

内存正常但 TPS 低,就看这六项:

原因表现怎么确认处理
区块生成新玩家跑图时突然卡有人往新方向跑就掉 TPS预生成、降视距
实体过多特定区域卡靠近某个刷怪塔/村庄就卡清理实体、限制刷怪
红石/漏斗基地附近卡人离开那片区域就恢复减少高频红石、漏斗
插件/模组装完就开始卡二分法卸载换轻量替代
手机降频越玩越卡、发热温度高,插电也没改善散热,别边充边玩
Java/核心不匹配启动就慢、一直卡版本对不上换正确的 Java 或核心

一张判断表:先对号,再动手#

内存条TPS更像先做什么
长期贴近上限低内存不足或泄漏降视距,查最近装了什么
很低正常给太少了加 256 MB,观察一晚
正常低CPU / 实体 / 区块查实体、预生成、二分插件
正常正常但玩家喊卡网络或客户端看延迟、让对方调画质
进程直接消失—被系统杀降内存上限、关电池优化

处理顺序:六步,别跳步#

顺序很重要,因为前面的步骤会改变后面的判断依据。

  1. 先降温、插电、关省电:降频会让所有优化失效,先排除它。

  2. 降视距和模拟距离:收益最大、风险最低,改完重启才生效。见 视距与模拟距离。

  3. 清理实体和掉落物:先备份,再清。清完观察 10 分钟 TPS。

  4. 二分插件/模组:一次卸一半,别一次卸光——卸光了就不知道是谁。

  5. 调内存上限:每次 256 MB,跑一晚再看。一次从 1024 跳到 4096,出问题你不知道是哪一步。

  6. 预生成世界:最后做,最耗时,但能一次性解决跑图卡顿。

每一步都要留下“改之前”和“改之后”的对比。没有对比,你只是在收集心理安慰。

什么时候该认输:减人数、降视距、换设备#

有些瓶颈不是优化能解决的。手机服的物理上限大概是这样(原版/Paper + 少量插件,经验值):

手机内存建议人数上限内存上限视距
3 GB1~2 人768~1024 MB6
4 GB2~3 人1024~1536 MB6~8
6 GB3~5 人1536~2048 MB8
8 GB5~10 人2048~3072 MB8

超过这个规模还硬撑,结果一定是又卡又烫、存档还容易写坏。模组服、大型整合包要在这个基础上再往下调。综合优化清单见 让手机服稳定运行。

不要用“内存清理/加速大师”

这类应用会主动杀后台进程,很可能连服务端和它的前台服务一起杀;它们“清理”完还会制造更多 GC 压力。Android 的内存管理不需要你手动干预,真正该做的是把 Minexa 加进电池优化白名单。

上机自查
  • 概览的内存条能读出「已用 / 上限」两个数字,不是 --。

  • TPS 显示在 18 以上,或你已确认掉 TPS 的具体时段和动作。

  • 内存上限没有超过手机可用内存的 60%。

  • 崩溃报告里如果是 OutOfMemoryError,你能说出是哪一种(heap / Metaspace / GC overhead)。

  • 手机不烫、不在充电,后台没有别的重应用。

  • 你已经按「先降视距、再调内存」的顺序做过一次,而不是同时改了三项。

下一步#

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

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