Minecraft开服常见故障排查:TPS暴跌、内存溢出与插件冲突解决

TPS 定位用 timings + Spark,内存溢出调 JVM 参数,插件冲突二分排查,区块预生成防卡顿
发布于
2

Minecraft 服务器开得久了,各种「卡」「崩」「掉」三连——玩家报卡、日志报错、内存吃满。多数问题有规律可循,不用每次从头排查。下面把最常遇到的五类故障的诊断方法和修复步骤整理出来。

一、TPS 暴跌:服务器变慢的根本原因

TPS(Ticks Per Second)是衡量 MC 服务器性能的核心指标,正常值 20。低于 18 开始有感知延迟,低于 15 就明显卡顿了。

怎么看 TPS

  • Paper 自带:控制台输入 /mspt/tps
  • 详细分析:/timings report 生成一份 HTML 报告,精确到每个插件、每个区块的耗时占比
  • Spark 插件:/spark profiler --timeout 300 采集 5 分钟的 CPU 分布,比 timings 更底层

常见原因与修复

原因 诊断 修复
实体/生物过多 timings 里 entity tick 占比高 限制养殖数量,加 ClearLag 插件定时清理
红石机器高频运转 特定区块 CPU 高 用 /paper chunkinfo 定位,关掉或降频
插件性能差 timings 里某插件耗时占比异常 换性能更好的替代品或去插件社区查 issue
视野/模拟距离太大 server.properties 的 view-distance 超过 12 降到 8-10,simulation-distance 设 6
内存不足、频繁 GC 日志里 GC 停顿超过 200ms 见下文「内存溢出」部分

timings 报告是最重要的诊断工具——不用猜,看数据说话。哪个插件占了 40% 的 tick 时间,卸掉或换掉。

二、内存溢出(OOM)与 JVM 参数修正

症状:服务端突然崩溃,日志末尾看到 java.lang.OutOfMemoryError: Java heap space

根因

  • -Xmx 给太小,玩家多了内存不够;
  • -Xmx 给太大(超过 12G),GC 全停顿反而变长,TPS 更差;
  • 内存泄漏——某些插件越跑占用越高,从不释放。

修复

# 推荐参数(Paper 1.21,4G 内存)
java -Xms4G -Xmx4G 
  -XX:+UseG1GC 
  -XX:MaxGCPauseMillis=200 
  -XX:+UnlockExperimentalVMOptions 
  -XX:G1NewSizePercent=30 
  -XX:G1MaxNewSizePercent=40 
  -XX:InitiatingHeapOccupancyPercent=15 
  -jar paper.jar nogui

G1NewSizePercent 和 InitiatingHeapOccupancyPercent 这几个参数对 MC 这类「大量短期对象」场景特别有效——让 G1 更早介入年轻代回收,减少全堆停顿。

三、插件冲突与报错定位

症状:装了新插件后服务器起不来、或者某功能突然失效、或者日志里刷 NullPointerException

排查步骤:

  • 二分法:卸掉一半插件→重启→看问题还在不在,逐级缩小范围;
  • 看日志栈NullPointerException 下面那堆 at com.xxx.plugin 就是肇事者;
  • 看 Paper 兼容性:有些插件只支持 Spigot 不完全兼容 Paper,去插件页面确认;
  • 版本匹配:插件版本必须和服务端 MC 版本一致,一个数字对不上就可能崩。

四、区块加载卡顿

症状:玩家走到未探索区域时全服卡一下(区块生成),或者进传送门跨维度时卡顿。

解决方案:

  • 预生成地图——用 Chunky 或 WorldBorder 插件在开服前把地图预先生成一遍,上线后玩家走到哪都不卡;
  • Paper 的 paper.yml 里设 max-auto-save-chunks-per-tick 为一个较低值(默认 24 可能太高);
  • 把 maps 目录大小控制住——地图越跑越大,磁盘慢了 I/O 就卡。

五、玩家连接超时/掉线

症状:有人能进有人进不去、或者进去一会儿就掉。

  • 安全组/ufw 只开了 TCP 没开 UDP?Java 版也是 TCP 但某些插件需要额外端口;
  • 网络超时:server.propertiesmax-tick-time 设 -1(Paper 默认-1禁用,Spigot 默认 60000 毫秒超时);
  • 读超时——玩家网络差,调大 read-timeout

如果用的是雨云游戏云,检查安全组确保 25565 端口对公网开放,同时检查服务器带宽是否被吃满——本站联机网络优化那篇有详细排查方法。

常见问题

关于 MC 开服排障的高频疑问,下面一并解答。

常见问题(FAQ)

TPS 掉到 15 以下怎么排查?
控制台输入 /timings report 拿到 HTML 报告,看哪个插件或实体类占了最多 tick 时间。八成是生物过多、红石机器或性能差的插件。Spark profiler 能做更底层的 CPU 级分析。
服务器 OOM 崩溃怎么办?
先确认 -Xmx 内存是否够用(不够就加),但别超过 12G(G1GC 大堆反而慢)。加上 JVM 参数 G1NewSizePercent=30 和 InitiatingHeapOccupancyPercent=15,让 GC 更早回收短期对象。如果加了内存还 OOM,大概率是插件内存泄漏——看哪个插件 GC 后不释放。
装了新插件服务器起不来怎么定位?
二分排除法:卸掉一半插件重启,看问题有没有消失,逐步缩小范围。日志里的 NullPointerException 后面的栈信息直接指向肇事插件。检查插件版本是否和 MC 版本匹配。
玩家跑到没去过的地方就全服卡一下?
这是区块生成卡顿。解决方法:开服前用 Chunky 插件预生成地图,把 view-distance 降到 8-10,Paper 的 max-auto-save-chunks-per-tick 降到 6-10。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600