AI 速览
基于实测数据的 Minecraft 服务端配置文件优化教程,覆盖 server.properties、bukkit.yml、spigot.yml、paper.yml 与 global.conf
这是一篇转载自 EmptyLava 的服务器配置优化教程,作者用 Spark 采样、在固定测试平台上逐项测试了视野距离、刷怪限制、实体激活范围、红石算法、区块加载、漏斗与 TNT 等配置项,并给出 TPS 与实体占用的对比数据。文末按实体、方块实体、红石、区块、漏斗分类汇总了各配置项的优化效果与副作用等级,并给出推荐数值。适合想用数据而非经验来调优 Paper、Spigot、Bukkit、Sponge 等核心服务端的管理员阅读,1.7.10 与 1.13+ 版本也有对应说明。
论坛附件
帖内链接
获取方式
- 测试平台为 Windows Server 2016、Xeon E5 2689 双核、6GB 内存,内存分配 4000M
- 测试版本多为 1.12/1.13,部分为 1.14/1.15,其他版本效果可能有差异
- 部分配置项仅特定核心生效,如 max-tick-time 在 Paper 上不生效
- 降低 max-tick-time、禁用漏斗 move 事件等可能带来数据不同步或机器失效等副作用
- 作者声明测试结果存在可接受范围内的误差,综合提升在生产环境会打折扣
本卡片由 AI 阅读本帖后生成,可能存在疏漏,请以帖子正文为准。
本帖最后由 Cnzw 于 2024-5-26 13:38 编辑
@Cnzw 前言
Server.properties 适用服务端:所有 1. View-distance (Test ID:2-7) (服务器允许的最大视野距离,单位:区块数,默认=10,低于9的数值还会减少刷怪量) 测试内容: ①玩家移动800格的服务器状况(有区块回收)[1.12] ①玩家在出生点时,不同数值时的服务器状况[1.15] 附加参数: ①在bukkit.yml/paper.yml内,并且将区块加载速度设置为1000000(实际测试中,由于网络问题,区块加载速度约50~85块/秒)[仅测试①需要] ②还需要设置spigot.yml内的view-distance,因为spigot.yml优先于server.properties[仅1.13-需要,后面的spigot.yml中view-distance默认为default,即根据server.properties] Bukkit.yml 适用服务端:Bukkit,CraftBukkit,Spigot,Mohist,Paper,Catserver等基于Bukkit的服务端 1. ticks-per (Test ID:15-19|126-130)(多少tick执行一次事件,spawn的事件是生物的生成;autosave是世界保存,默认值animal-spawns[动物]=400 monster-spawns[怪物]=1 water-animal-spawns[水生动物/1.16+]=1 water-ambient-spawns[水下环境生物/1.15+]=1 ambient-spawns[环境生物/1.15+]=1 autosave=6000) 这项配置只测试ticks.per-monster-spawns,其他数值和monster-spawn大同小异,且刷新数量较少,不进行测试。autosave测试结果不精准,同样不测试 测试内容: ①不同ticks-per.monster-spawns数值时,玩家在出生点以16的视野距离挂机60秒后的服务器状况[1.12] ②不同ticks-per.autosave数值时,世界保存的占用[1.12] ①不同ticks-per.water/amibient-spawns数值时,玩家在出生点以8的视野距离挂机60秒后的服务器状况[1.15] 附加参数: ①禁用区块回收 ②View-distance=16 ③不限制bukkit.yml内的spawn-limits(此配置项会限制玩家周围的最大刷怪量,因此测试时需取消限制) 2. spawn-limits (Test ID:20-24|144-148)(每个玩家在所在世界中能刷出多少怪物,默认:monsters:70 animals:15[1.12-]/10[1.13+] water-animals:5[1.12-]/10[1.13+] ambient:15 water-ambient[1.16+]=20) 测试内容: ①:参数不同时玩家在出生点的时候服务器状况[1.12] ②:参数不同时玩家在出生点的时候服务器状况[1.15] 附加参数: ①View-distance=16 ②需要在spigot.yml内设置mob-spawn-range为等同于视野距离的数值,否则会影响此参数的效果导致不刷怪 ③测试时spawn-limits的默认值为正常的10倍,模拟10人时的情况 3. chunk-gc (Test ID:33-36) chunk-gc.period-in-ticks (多少tick回收一次区块,默认值=600,即30秒。修改此项同时也要修改paper.yml内的delay-chunk-unloads-by,或者禁用其中一项) chunk-gc.load-threshold[1.13-] (两次区块回收之间,需要加载多少区块才能进行下一次区块回收,默认=0) 这两项数值不会影响很多性能 这是测试chunk-gc.period-in-ticks在不同情况下的性能占用: Spigot.yml 适用服务端:Spigot Paper Mohist Catserver等 1. Mob-spawn-range (Test ID:25-32)(以玩家为中心的半径多少区块内可以刷怪,默认1.12-=4,1.13+默认值=8) ⚠️数值设置大于9,也不会在9区块外刷怪,因为原版刷怪机制为:生物离玩家最多128格,否则刷出的怪物将被删除 ⚠️数值低于8时,服务器内刷怪量低于或远低于正常刷怪量[仅1.13或更低版本] 在1.13或更低版本的服务器上,较低的数值会导致刷怪量急剧减少,这是因为bukkit.yml内的spawn-limits限制了平均一个区块内能生成多少生物,而mob-spawn-range会阻止较远的区块生成怪物,两项配置的共同作用使得刷怪数量远低于正常水平 测试内容: ①修改mob-spawn-range,bukkit内spawn-limits为原来的3倍时候,服务器内生物刷新的状况[1.12] 附加参数: ①view-distance=16 2. entity-activation-range (Test ID:37-42)(以玩家为中心,生物距离玩家多少格内才被激活/每秒被激活的数量限制,默认值在下方,已折叠) 测试内容: ①不同entity-activation-range.monsters数值时,玩家绕500只分散的僵尸移动时,服务器占用[1.12] 附加参数: ①:禁用区块回收 ②:将paper.yml内的despawn-ranges.soft设置为128(否则服务器内的怪物会被缓慢删除,影响测试效果) ③:view-distance=16 3. max-tick-time (Test ID:48-52)(在服务器的两个tick之间,实体/方块实体最多允许被计算多长时间,单位毫秒,默认tile:50,entity:50) 默认数值已经足够了,如果你的服务器实体/方块实体占用极高,降低这两项数值可能会有显著的提升。如果实体/方块实体占用不高如果设置太低,实体/方块实体会跳过计算,可能会导致玩家体验下降/漏斗分类机堵塞之类的bug。 测试内容: ①使用Spigot核心(因为paper禁用此项),在不同max-tick-time.entity数值的情况下,1400只实体的占用,以及玩家怪物计算被跳过的情况[1.12] (由于tile很难达到50ms/tick,因此不测试max-tick-time.tile,且max-tick-time.entity的规律适用于tile) 附加参数: ①View-distance=16 ②/gamerule doMobSpawning false(禁止生物自然生成) ③使用timings v1进行数据收集,而不是spark(spark对于低tps时的采样效果不好) 4. ticks-per (Test ID:53-58)(漏斗多少tick传输一次,多少tick检查一次,默认hopper-transfer: 8 hopper-check:1) hopper-amount(漏斗一次传输几个,默认值为1,此项不影响性能,但是会影响效率) 测试内容: ①100个漏斗传输物品时,不同数值下(这三个数值的1倍,2倍,3倍,4倍,5倍),漏斗的占用[1.12] 其他参数: ①/gamerule doMobSpawning false(禁止生物生成,因为测试的时候动用了summon命令生成怪物来生成掉落物) ②使用spigot核心 5. max-tnt-per-tick (Test ID:122-125)(每个tick最多计算多少个tnt,默认=100) 测试内容: ①不同数值时5000余个TNT爆炸时,服务器的状况以及TNT的占用[1.12] ②不同数值时2000余个TNT爆炸时,服务器的状况以及TNT的占用[1.15] 附加参数: ①view-distance: 16 Paper.yml 适用服务端:Paper 1. world-settings.max-chunk-gens-per-tick[1.13-](每个世界中每tick最多生成多少区块,默认=10) world-settings.max-auto-save-chunks-per-tick(每个世界中保存地图时,每tick最多保存多少区块,默认=24) world-settings.max-chunk-sends-per-tick[1.13-](每个世界中每tick最多发送多少区块,默认=81) 注:生成≠发送,生成这里指的是从未被加载过的区块,发送指的是已经加载过的区块 这三个配置项放在一起的原因: ①它们的功能都相似 ②它们对于服务器的优化效果不是很明显(除非服务器玩家跑的比香港记者还快/网速感人),但是这三项数值对于提升服务器的稳定性(可以让tps更平滑,减少跑图/世界保存带来的突发tps降低) 测试内容: ①不同数值时,5倍移动速度平稳加载新区块时,服务器tps和CPU占用[1.12] 附加参数: ①view-distance=16 2. Timings.enabled (Test ID:64-71)(是否开启timings,默认=true) Timings是一个服务器分析工具,虽然很轻量,但仍然会有一定占用,服务器不会每时每刻都用Timings。 测试内容: ①在服务器的不同占用情况下(即每秒tick数不同时),co.aikar.timings.FullserverTickHandler.stopTiming与co.aikar.timings.FullserverTickHandler.startTiming的总占用[1.12] 附加参数: ①在第7/8个测试中,Entity-activation-range和Entity-tracking-range都为128 3. world-settings.anti-xray.enabled (Test ID:72-81)(是否启用反透视,默认=false。这里不讨论其他配置,因为不会影响性能) 注意:①测试的时候engine-mode=1(也是默认值)似乎是没有用的,但设置为2时可以生效 ②反透视的原理是服务器修改数据包,让服务器发给玩家的关于区块数据的数据包中都充满假矿,玩家收到数据包后,自己看不见的区域都会变成假矿。如果玩家正在用一些作弊mod透视矿物,他看到的将都是假矿 测试内容: ①开启和关闭反透视的两种情况下,服务器的sleep占比和ServerConnection(绝大部分为数据包交换)的占用,并多次测试求平均值[1.12] 附加参数: ①前面说过了的world-settings.anti-xray.engine-mode=2 4.world-settings.despawn-ranges (Test ID:82-85)(生物离玩家多远将会被删除,soft是缓慢地依次删除[随溢出实体数量增加而变快],hard是直接删除。默认值soft=32,hard=128) 这里的soft不能比hard高,否则高出部分没有意义。而且不建议比spigot.yml内entity-activation-range.monsters低,否则可能怪物对你有仇恨却突然没了 这项数值会尽量保证服务器内的实体回到bukkit.yml内spawn-limits限制的范围以下,除非实体不能再被删除了 测试内容: ①新生成的僵尸=服务器内限制生物数量,且生物已经饱和的情况下,不同soft数值下服务器的状况(没有动hard,因为会改变实体机制)[1.12] 附加参数:无 5. world-settings.optimize-explosions (Test ID:86-93)(是否开启paper对于爆炸的优化,死亡的实体会被立即清除等,从而减少爆炸占用。默认=false) 开启后爆炸时的实体将被缓存而不是重复计算,1.15或更高的版本开启此项可能效果不明显 测试内容: ①不同数量TNT爆炸时,TNT的占用和睡眠的tick占比[1.12] ②不同数量TNT爆炸时,TNT的占用和睡眠的tick占比[1.15] 附加参数:无 6. world-settings.hopper.disable-move-event (Test ID:93-97)(是否禁用漏斗的move事件,禁用后可以降低漏斗占用,但coreprotect,领地插件等可能无法记录或保护漏斗物品) 注意:这个选项上方还有一个push-based[高版本已被移除],可能可以对漏斗进行优化,但有重大BUG[详情见github issue #763 #354],因此在后期版本删除了此项,本贴也不对push-based进行测试 测试内容: ①当漏斗传输和不传输时,分别启用和禁用move事件时,漏斗的占用[1.12] 附加参数:无 7. use-faster-eigencraft-redstone (是否启用theosib的红石优化算法,启用后对于红石的优化巨大。仅1.13~1.15可用,默认=false) 注:由于Mojang在1.16大改红石机制,原算法的作者还没有更新适配1.16的新算法,因此这一项在1.16被移除了 测试内容: ①:启用这项后对于红石计算的优化效果[1.13] 附加参数: ①:view-distance=8(以后高版本除特殊情况外,默认=8,因为性能差异问题会影响结果) 8.keep-spawn-loaded-range (Test ID:117-121)(出生点加载区块的范围,加载区块数=[(数值*2+1)^2],默认值=4) keep-spawn-loaded(是否加载出生点区块,默认值=true) keep-spawn-loaded-range:0 和keep-spawn-loaded: false的区别:前者会加载出生点的1区块,后者不会加载出生点区块。除非玩家加入服务器并加载了区块。并且keep-spawn-loaded的部分是无法被卸载的 另外,在2019年2月22日之前构建的paper.jar,在玩家加载出生点前,出生点区块不会被加载,请悉知(论核心更新的重要性) 测试内容: ①无玩家进入时,不同数值的keep-spawn-loaded-range能减少多少的tick占用[1.12] ②无玩家进入时,不同数值的keep-spawn-loaded-range能减少多少的tick占用[1.15] 附加参数:无 9. chunk-tasks-per-tick (1.15+可用,每个tick最多能执行多少次区块的任务,默认=1000) 官方称降低此项数值可能对区块渲染和区块生成有帮助,但在实际测试中(1.15/1.16),无论设置为多少数值,都无法看见因这项配置带来的区块渲染/生成速度变化,也没有减少实际占用。我目前也不推荐降低此项数值以进行优化。 Global.conf 适用服务端:Sponge 注:文件在服务端目录\config\sponge\global.conf中,这是sponge最主要的配置文档 测试时服务端核心是API7.2.0/SpongeForge,由于本配置文件的配置项较多,还会写出配置项所在第XX行 另外global.conf中有大量内容与server.properties/bukkit.yml/spigot.yml/paper.yml重合,这一部分将不会进行测试 1. deny-chunk-requests (Test ID:98-101/第630行)(设置为true后,所有未加载区块内的请求都会被拒绝。它可以提升一定性能,但它是实验性设置。默认值=false) 启用它可能会导致一些问题,如果这些问题出现了并确定是该项配置导致的,可以根据严重程度考虑关闭它 测试内容: ①玩家不移动和玩家跑图时,开启/关闭此项时的服务器状况[1.12] 附加参数: ①view-distance=16 2. panda-redstone (Test ID:102-105/第479行)(使用panda4944的红石算法以提升性能,默认值=false) 这项配置在spongeForge服中可能效果不好(MOD服谁用红石啊),但是如果你是用SpongeVanilla(并且是生存服),那么这一项的优化效果绝对是显著的。 测试内容: ①:不同红石数量不断更新(并更新周围方块)时,开启/关闭此项配置时红石更新的占用和服务器状况[1.12] 附加参数: ①这次使用了SpongeVanilla。稳定性更好同时数据更精确 3.eigen-redstone (Test Id:106-112/第432行)(是否启用theosib的红石优化算法,同样可以提升性能,默认值: enabled=false vanilla-decrement=false vanilla-search=false) enabled决定这个算法是否启用 vanilla-decrement决定了是否使用原版的红石能量等级计算,默认值即为使用优化算法 vanilla-search决定是否使用原版的方块更新机制,默认值即为使用优化算法 测试内容: ①启用这项后对于红石计算的优化效果[1.12] ②子配置项内两个选项对于红石计算的优化效果[1.12] 附加参数: ①还是用SpongeVanilla啦 4. mob-spawn-range (同spigot.yml,默认值=4) 但是sponge中,此项修改通常不会影响刷怪上限,修改数值有微弱的实体占用变化(对实体优化不会超过5%),不过会降低刷怪速度 由于优化效果几乎很小,所以不测试 总结 以下根据结果总结了server.properties/bukkit.yml/spigot.yml/paper.yml/global.conf中的所有配置项 如果你需要自己对配置进行修改,可以查看下面的内容 如果你只需要一个能优化的文件,直接拉到最下面白嫖配置文件即可 优化效果:极好>好>较好>一般>较差>差>极差>特别差
副作用:无>极小>小>中等>较大>大>极大
分界线上方是已经测试过的内容,同时有中等或更好的优化效果 分界线下方是未测试过的内容,这些配置项绝大多数优化效果都特别小 注:由于帖内宽度的问题,有一部分配置项没有写完全 对于实体,有18项配置项可以进行优化,其中10项优化效果较好
对于方块实体,有1项配置项可以优化,此项优化效果较好
对于红石,有3项配置项可以优化,这3项优化效果较好
注: paper.yml内use-faster-eigencraft-redstone和global.conf内eigen-redstone为同一个算法 对于区块,有12项配置可以优化,其中8项优化效果较好
对于漏斗,有5项配置可以优化,这5项优化效果较好
关于其他类型的优化,有1项配置可以优化
更改配置文件虽然能大幅提升性能,但它不是万能的,如果你需要对服务器进行更好的优化,请打开折叠部分 更多 如果本贴有格式/语法问题,或者你希望我搬运更多教程文章,欢迎联系我! 搬运催更 & 问题反馈:快速响应问卷 或在下方留下评论。 ![]() |

提升卡
观察者