MC服务器性能优化
服务器性能指标
Section titled “服务器性能指标”在开始优化你的服务器之前,你应该了解一些 MC 的性能指标。
MC 服务器中存在一些性能指标,保证这些指标在正常的范围内,可以让你的玩家在服务器中得到流畅的体验。
推荐在服务器上安装 TabTps 插件来方便观察服务器的一些性能指标。
tps 为每秒进行的游戏刻数量,正常游戏中,每秒游戏会进行20刻,如果服务器卡顿,tps会显著下降,只要你的服务器没有过载,tps 应保持 20。
tps 与下文的 mspt 有着很大的关系,mspt 的数值直接决定了 tps 的高低。
mspt 为计算一个游戏刻度所需要的时间,单位为毫秒/ms(一秒为 1000ms),该指标的数值将直接影响 tps,mspt 在大于 50 时,即处理一个游戏刻需要的时间大于 50ms,换算下来,服务器将无法在 1s 内计算 20 个游戏刻,tps 会明显下降,正常服务器的 mspt 应保持在 50 以下。
mspt 的数值与游戏内一切占用 CPU 的行为有关,占用越高,mspt 数值越高。
ping 为向服务器发送数据包,直到收到回应所需的时间,单位为毫秒,ping值越大,延迟也就越高,当服务器负载过高时,服务器可能无法处理请求,也会导致 ping值过高。
在保证服务器主线程所在的核心负载不会过高的情况下,该数值可以可以通过优化网络来调整,在这里不会着重对此项进行优化。
安装 TabTps 插件,服务器游戏内按下 tab 键可以观察到服务器的这些性能指标。(来自群友的截图)

了解上述的指标后,我们可以开始优化服务端,最应该注意的是 mspt 的数值,也就是减少 CPU 的占用,以下几个因素最容易占用 CPU。
-
实体数量
-
生物AI
-
复杂的红石电路
-
区块的生成
生成新的区块文件会消耗大量的性能,可以选择提前生成区块文件,仅需生成一次文件,这样当玩家在地图中游玩的时候,服务器仅需将区块数据发送给玩家即可。
使用 Chunky 插件来提前生成区块文件
Chunky 同时也是一个模组,在客户端也可以使用,且方法相同,用法如下。
快速开始使用:
- chunky radius <radius> 设置半径
- chunky center [<x> <z>] 设置中心块
- chunky start 在当前选区中开始新生成
- chunky pause 暂停并保存当前区块生成任务
- chunky continue 继续运行当前或保存的区块生成任务
- chunky cancel 停止并取消当前运行中的区块生成任务
- chunky progress 在游戏中显示所有任务的预生成进度
Chunky 默认选择(0,0)作为中心,500 作为半径,直接使用以下命令会以默认值开始生成:
/chunky start假设我们以世界(256,256)为中心,生成半径 1280 格的区块文件,可以这样输入命令:
/chunky radius 1280
/chunky center 256 256
/chunky start在控制台会产生如下输出:
[05:54:49 INFO]: [Chunky] Task started in world for the square region centered at 1280, 1280 with radius 1280.[05:54:49 INFO]: [Chunky] Task running for world. Processed: 51 chunks (1.21%), ETA: 0:00:13, Rate: 320.8 cps, Current: 13, 2[05:54:50 INFO]: [Chunky] Task running for world. Processed: 451 chunks (10.67%), ETA: 0:00:09, Rate: 380.9 cps, Current: 13, 16更多命令不做过多赘述,参考如下:
- chunky selection 展示当前选区
- chunky world [world] 设置选中的世界
- chunky shape <shape> 设置目标形状
- chunky center [<x> <z>] 设置中心块
- chunky worldborder 设置中心和半径以匹配所选世界的世界边界
- chunky spawn 设置中心至出生点
- chunky corners <x1> <z1> <x2> <z2> 根据角坐标设置选区
- chunky pattern <pattern> 设置首选生成模式
- chunky silent 开关显示更新信息
- chunky quiet <interval> 设置更新消息的静默间隔(以秒为单位)
- chunky reload 重新加载配置
- chunky trim 删除选区之外的块
关闭不必要的生物AI
Section titled “关闭不必要的生物AI”村民的 AI 是所有生物中最复杂的,对 CPU 的占用也非常高,当服务器中存在过多的村民时,过多的村民AI会吃掉服务器的大部分性能,禁用不必要的村民的 AI 是非常必要的。
修改 nbt 来禁用生物的AI
使用 /data 命令可以修改 nbt 数据,在村民的 nbt 标签中插入 {NoAI:“1b”} 即可禁用村民的生物 AI,使用以下命令修改村民的 nbt 标签来禁用 AI
/data merge entity @e[limit=1,type=villager,sort=nearest,distance=..5,nbt=!{NoAI:"1b"}] {{NoAI:"1b"}}此命令将选择5格内距离你最近的1名没有禁用 AI 的村民,并禁用其生物 AI。
如果批量禁用也很简单,仅需将以下命令放入循环型命令方块中,然后围绕着所有的村民跑一圈即可。
execute at <你的游戏ID> run data merge entity @e[limit=1,type=villager,sort=nearest,distance=..5,nbt=!{NoAI:"1b"}] {{NoAI:"1b"}}JVM 参数优化
Section titled “JVM 参数优化”…我不会