【开服】使你的服务器减少卡顿!Minecraft服务器优化指南
四氧化三猫
编辑于 2026年06月13日 16:44

前言

继上一篇《开服指南》【服务端】全站最详细、最全面的开服教程!利用MCDR架设服务器,并且拥有你的皮肤站!​发布后,笔者就想趁热打铁发布优化指南,结果材料都收集好了,电脑坏了!(悲)今天刚给电脑修好,就赶快写了这篇文章。

注意:你当然可以优化服务器,但是!优化是在配置足够的基础上进行的,如果你用一个配置极低的服务器来开服,那再怎么优化也不行!


性能测量指标

1.TPS(每秒Tick数)

TPS 是衡量服务器运行流畅度最核心的指标,20.0为优秀。

代码块
markdown
自动换行
复制代码
| TPS 值 | 评级 | 玩家体感 |
|--------|------|----------|
| 20 | 完美 | 无任何卡顿 |
| 19.95 – 19.99 | 很好 | 几乎无法感知 |
| 18.5 – 19.94 | 一般 | 偶尔轻微卡顿 |
| 16.0 – 18.4 | 差 | 明显卡顿,需着手优化 |
| < 16.0 | 无法游玩 | 急需全面优化 |
复制成功

2.Ping(网络延迟)

代码块
markdown
自动换行
复制代码
| Ping 值 | 评级 | 建议 |
|----------|------|------|
| 1 – 90ms | 极好 | 理想状态 |
| 91 – 179ms | 好 | 可接受 |
| 180 – 299ms | 差 | 建议排查网络 |
| 300 – 499ms | 很差 | 需更换节点或线路 |
| 500ms+ | 不可用 | 换更近的服务器 |
复制成功

3.FPS(客户端帧率)

不要和MSPT、TPS搞混了!

MSPT(Milliseconds Per Tick)就是说,服务器处理每一个游戏刻要花费的平均时间,单位是毫秒。注意的是tick和FPS(客户端帧率,可以理解为自己电脑的帧数)是两个不同的概念,不要搞混了,一般服务器一秒钟可以处理20次tick,也就是说MSPT值为50。

TPS(Ticks Per Second)指的是片每秒,顾名思义,指的就是服务器每秒能够处理的片数量,上面说的

一般服务器一秒钟可以处理20次tick

就是等同于说TPS值等于20

4.诊断工具

优化铁律:先监控、再优化。在没有Spark数据的情况下盲目改参数,往往适得其反。

代码块
markdown
自动换行
复制代码
| 工具 / 命令 | 用途 | 来源 |
|-------------|------|------|
| `/mspt`(Paper 内置) | 查看最近 Tick 耗时;前两个值 <50ms 为正常,第三个值 >50ms 说明存在 Tick 超时 | 
| `/timings paste` | 生成性能报告链接,可分享排查卡顿原因 | 
|Spark插件 | 深度分析 CPU 和内存使用情况,定位性能瓶颈 | 
复制成功

服务端的选择

你也可以用其他各类服务端,但是其他服务端的性能笔者未知,所以插件完善度也无从得知(原版无法加插件)

代码块
markdown
自动换行
复制代码
Vanilla(原版) → Bukkit → Spigot → Paper配置文件存在覆盖关系,高层级可覆写低层级
复制成功

JVM / Java 启动参数

1.基础启动命令

代码块
Shell
自动换行
复制代码
java -Xms2G -Xmx2G -jar paper.jar
复制成功

2.Aikar's Flags高阶优化参数

2.1.Aikar's Flags 是目前社区公认最优的 Minecraft 服务器 JVM 参数方案。适用于 8GB+ 物理内存的服务器:

代码块
Shell
自动换行
复制代码
java -Xms10G -Xmx10G \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:+AlwaysPreTouch \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -XX:G1HeapRegionSize=8M \
  -XX:G1ReservePercent=20 \
  -XX:G1HeapWastePercent=5 \
  -XX:G1MixedGCCountTarget=4 \
  -XX:InitiatingHeapOccupancyPercent=15 \
  -XX:G1MixedGCLiveThresholdPercent=90 \
  -XX:G1RSetUpdatingPauseTimePercent=5 \
  -XX:SurvivorRatio=32 \
  -XX:+PerfDisableSharedMem \
  -XX:MaxTenuringThreshold=1 \
  -Dusing.aikars.flags=https://mcflags.emc.gs \
  -Daikars.new.flags=true \
  -jar paper.jar
复制成功

2.2.内存超过 12GB 时的额外调整

当服务器物理内存超过 12GB 时,在上述参数基础上修改以下值:

代码块
PlainText
自动换行
复制代码
-XX:G1NewSizePercent=40
-XX:G1MaxNewSizePercent=50
-XX:G1HeapRegionSize=16M
-XX:G1ReservePercent=15
-XX:InitiatingHeapOccupancyPercent=20
复制成功

2.3.参数解读

代码块
markdown
自动换行
复制代码
| 参数 | 作用 | 重要性 |
|------|------|--------|
| `-Xms` = `-Xmx` | 初始堆 = 最大堆,避免动态扩容浪费,G1GC 效率更高 | 必设 |
| `G1NewSizePercent=30` | 新生代占堆 30%,适配 MC 高对象分配率 | 重要 |
| `MaxGCPauseMillis=200` | GC 暂停目标 200ms(约 4 个 Tick) | 重要 |
| `MaxTenuringThreshold=1` | 减少对象晋升老年代,降低 Major GC 频率 | 重要 |
| `G1HeapRegionSize=8M` | 避免大量内存被视为 "Humongous" 巨型对象 | 推荐 |
| `DisableExplicitGC` | 禁止插件调用 `System.gc()`,防止延迟峰值 | 推荐 |
| `AlwaysPreTouch` | 启动时预分配并触零所有内存页 | 推荐 |
| `ParallelRefProcEnabled` | 多线程并行处理弱引用、软引用 | 推荐 |
复制成功

详细了解可以去Paper官网:https://docs.papermc.io/paper/aikars-flags/

2.4.内存分配要注意的

永远不要用完物理内存! 必须为操作系统预留1.5–2GB


server.properties 配置

1.view-distance(视距) ⭐ 优先级最高

⚠️视距低于 7 时,请同步调整 spigot.yml 中 mob-spawn-range,使其比视距小 1。

2.simulation-distance(模拟距离)

模拟距离决定服务器"实际计算"的范围,比 view-distance 对性能影响更大。建议设为 4 起步。


bukkit.yml 配置

1.spawn-limits(每玩家生物生成上限)

代码块
markdown
自动换行
复制代码
| 生物类型 | 默认值 | 推荐一 | 推荐二 | 性能影响 |
|----------|--------|-----------|-----------|----------|
| monsters(怪物) | 70 | 50 | 20 | 重 |
| animals(动物) | 10 | 8 | 5 | 中 |
| water-animals(水生动物) | 15 | 7 | 2 | 中 |
| water-ambient(水生环境) | 20 | 10 | 2 | 中 |
| ambient(蝙蝠等) | 15 | 1 | 1 | 轻 |
复制成功
  • 简单生存服→选一

  • 小游戏服/生电服务→选二

  • 配合Paper的per-player-mob-spawns: true使用效果最佳

2.period-in-ticks(区块垃圾回收频率)

更频繁地卸载空区块,减少无用区块占用的 TPS。

代码块
markdown
自动换行
复制代码
| 项目 | 值 |
|------|-----|
| 默认值 | 600 |
| 推荐值 | 400 |
| 性能影响 | 中等 |
复制成功

3.(type)-spawns(各类生物生成间隔)

数值越大,生物生成越慢,服务器负担越小。

代码块
markdown
自动换行
复制代码
| 类型 | 默认值 | 推荐值 | 说明 |
|------|--------|--------|------|
| monster | 1 | 5 | 怪物生成间隔增大 5 倍 |
| water | 1 | 11 | 水生生物生成大幅减慢 |
| water-ambient | 1 | 21 | 环境水生生物几乎不影响游戏 |
| ambient | 1 | 31 | 蝙蝠等背景生物最慢 |
复制成功

4.autosave(自动保存间隔)

推荐值:6000(保持默认即可,但务必确认不为 0)


六、spigot.yml 配置

1.save-user-cache-on-stop-only(仅停服时保存用户缓存)

减少持续写入操作,直接节省 TPS。

代码块
markdown
自动换行
复制代码
| 项目 | 值 |
|------|-----|
| 默认值 | `false` |
| 推荐值 | `true` |
| 性能影响 | 中等 |
复制成功

2.max-tick-time(最大 Tick 时间)

设为 1000 相当于禁用此硬限制。避免因瞬时卡顿被系统误判而强制崩溃。

代码块
markdown
自动换行
复制代码
| 类型 | 默认值 | 推荐值 | 说明 |
|------|--------|--------|------|
| tile | 50 | 1000 | 方块实体 |
| entity | 50 | 1000 | 实体 |
复制成功

3.mob-spawn-range(生物生成范围)

  • 默认值:8(块)

  • 推荐值:6

  • ⚠️ 当 view-distance≤6 时,生成范围应比视距小 1

4.tick-inactive-villagers(Tick 非激活村民)

  • 默认值:true

  • 推荐值:false

  • 说明:防止激活范围外的村民继续被 Tick,对大型村民交易厅效果显著。

5.nerf-spawner-mobs(削弱刷怪笼生物 AI)

  • 默认值:false

  • 推荐值:true

  • 说明:刷怪笼生成的生物没有 AI(不移动、不攻击、不游泳),对于大型刷怪塔 TPS 节省极为显著。

6.item-despawn-rate(物品消失速率)

  • 默认值:6000(5 分钟)

  • 推荐值:视情况降低

  • 建议:配合 Paper 的 alt-item-despawn-rate 对垃圾方块单独设置更短的消失时间。

7.arrow-despawn-rate(箭矢消失速率)

  • 默认值:1200

  • 推荐值:300


地图预生成

为什么必须预生成?

玩家探索新区域时,服务器需要实时生成地形,这是最消耗 CPU 的操作之一。预生成可以在开服前完成所有区块的计算,之后玩家探索就是纯粹的读取而非计算。

操作步骤

  1. 安装Chunky插件

  2. 设置世界边界半径

  3. 执行预生成命令(可能需要数小时,取决于半径大小)


核心原则

  1. 没有万能方案 — 每个服务器的玩法、人数、硬件都不同,需实测调整

  2. 先监控,后优化 — 装Spark、看/mspt,数据驱动而非拍脑袋

  3. 配置文件>插件补丁 — 大量问题仅靠调配置就能解决

  4. 平衡性能与体验 — 过度优化会让服务器变"空",适得其反

  5. 核心升级 — 从 Vanilla → Paper,性能提升立竿见影

  6. 预生成 — 配置调好 + 地图预生成=丝滑体验


本期文章又是一篇大(小)作啊!喜欢的给我点个关注和赞吧!谢谢啦~