找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

服务器配置文件优化 —— 让测试数据来说话吧!TPS最高提...

Cnzw 2024-5-26 13:49:05 转载 阅读 588 来自 中国浙江宁波
联机教程
教程类型: 开服
教程来源: 转载
原贴地址: https://www.mcbbs.com/thread-1082459-1-1.html
教程目标: 服务器配置文件优化

马上登录/注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Cnzw 于 2024-5-26 13:51 编辑


@Cnzw
因XF不支持上标注释(tooltip)省略了所有上标注释。
优化了部分文案和格式。

前言

  • 这篇教程的意义?
    目前站内的100%关于配置文件的优化教程,大多都是凭借前人经验与个人感觉,而实际的优化效果可能欠佳,不但优化效果差,还会严重影响玩家体验。而本篇教程就是为了在配置文件中找出最有效的配置项,以及最佳优化效果时的数值,并结合形成整个配置文件。
  • 你的测试数据怎么让我们信服?
    我们每次测试都会记录下测试数据,然后公布在腾讯文档上(以后可能会发布在pastebin上),每一次测试都可以寻找到spark链接和当时的TPS/Chunks/Entities/Tiles,不可能出现造假的情况,同时我们会尽量减小测试的误差。
  • 测试平台是?
    Windows Server 2016 / Intel Xeon E5 2689 2 Cores / 6GB
    服务器进程的内存分配为4000M
    启动参数为 java -jar -Xmx4000M -Xms4000M server-1618.jar
    服务器版本在测试时会有说明,大部分为1.12/1.13,也有1.13/1.14内容 服务器种子为114514(防止地图建筑等对 测试的影响)
    其他参数如未说明,均为默认参数
    数据采样使用Spark,仅一次使用Timings
  • 为什么不用Timings?你是不是歧视它不好用?
    对,就是不好用
    ①由于核心为Paper,Timings的数据收集至少需要3分钟,这给测试带来了许多不便
    ②Timings在对照条件下根本就没!法!用!随随便便生成的Timings报告都有400%的tick,肯定是不符实际的,我怎么知道它是正确的还是错误的呢
    当然,极少数情况我们也可能会选择Timings
  • 我服务器是1.7.10/1.13+的,看你的这篇教程有用吗?
    对于1.7.10,您可以大胆参考,不需要有任何担心
    对于1.13+,测试内的Chunks/Entities/Tiles是不会变的,变的只是TPS和优化效果,而优化效果看的是被测事物本身,比如我要测服务器内100区块和200区块的占用情况如何,优化效果的多少在1.12和1.13+是接近的,即使单个区块的占用变了,优化效果也不会变化多少。并且我们也对1.13+的内容进行了测试,让数据更加准确。
  • 其他
    在鸽(zuo)了在鸽(zuo)了,具体进度请查看腾讯文档,本教程比腾讯文档晚更新
    结论的表格中的“综合提升”有一定参考价值,在实际生产环境中的提升效果会有一定折扣(除非服务器没有插件占用),‘针对提升’是针对某些单一方面的(看针对提升的效果时,请注意这个配置项测的是什么),同时针对提升一般反映的是这项配置的最大优化能力,请勿把针对提升当做此配置的真实优化水平!
    由于某些原因,我不可能会去多次测试取平均值,所以测试结果会有一定误差(但是误差会在可接受范围内)


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中的所有配置项
如果你需要自己对配置进行修改,可以查看下面的内容
如果你只需要一个能优化的文件,直接拉到最下面白嫖配置文件即可


优化效果:极好>好>较好>一般>较差>差>极差>特别差

  • 极好:在任何情况下都能让占用至少减半/TPS提升巨大
  • 好:在多数情况下都能减少40%以上的占用/TPS提升很大
  • 较好:一般情况下都能减少客观的占用/提升一定的TPS
  • 一般:优化效果不是特别好,在特定情况下才有明显优化
  • 较差:看不到明显的优化效果,在特定情况下才有较小优化
  • 差:几乎看不到优化效果,在特定情况下才有较小的优化
  • 极差:用debug/timings/spark都很难看出优化效果,跟不用说实际情况了
  • 特别差:挂名配置文件,改了也更没改差不多


副作用:无>极小>小>中等>较大>大>极大

  • 无:副作用为零
  • 极小:副作用几乎不用考虑,根本不会影响游玩体验
  • 小:副作用小,在一些特定情况会影响游玩体验
  • 中等:有一定的副作用,偶尔会影响游玩体验
  • 较大:时常会影响游玩体验,玩家可能会发现显著的区别
  • 大:常常会影响游玩体验,玩家会发现显著的区别并抱怨
  • 极大:严重影响游玩体验,玩家会发现显著区别且有时无法游玩下去(例如CS:GO变成了回合制游戏)


分界线上方是已经测试过的内容,同时有中等或更好的优化效果


分界线下方是未测试过的内容,这些配置项绝大多数优化效果都特别小

注:由于帖内宽度的问题,有一部分配置项没有写完全
对于实体,有18项配置项可以进行优化,其中10项优化效果较好
配置文件配置项优化效果副作用
server.properties+spigot.ymlview-distance较好中等
bukkit.ymlspawn-limits
bukkit.ymlticks-per.monster-spawns极小~较大
bukkit.ymlticks-per.animal-spawns一般极小
spigot.ymlentity-activation-range较好
spigot.yml+global.ymlmob-spawn-range一般
spigot.ymlmax-tick-time.entity较好(paper除外)较大
paper.ymldespawn-ranges较好
paper.ymloptimize-explosions较好极小
global.confliving-hard-despawn-range一般中等
global.confliving-soft-despawn-range一般中等





spigot.yml+paper.yml+global.conmax-entity-collisions极差
spigot.ymlsquid-spawn-range
spigot.ymlarrow-despawn-rate特别差
spigot.ymlmerge-radis极小
paper.ymlexperitence-merge-radis极差极小
global.ymlitem-merge-radis极小
global.confitem-despawn-rate较差中等
global.confliving-soft-despawn-minimum-life较差较小


对于方块实体,有1项配置项可以优化,此项优化效果较好
配置文件配置项优化效果副作用
spigot.ymlmax-tick-time.tile好(paper除外)中等


对于红石,有3项配置项可以优化,这3项优化效果较好
配置文件配置项优化效果副作用
paper.ymluse-faster-eigencraft-redstone极好
global.confeigen-redstone极好
global.confpanda-redstone极好

注: paper.yml内use-faster-eigencraft-redstone和global.conf内eigen-redstone为同一个算法

对于区块,有12项配置可以优化,其中8项优化效果较好
配置文件配置项优化效果副作用
server.properties+spigot.ymlview-distance极好中等
bukkit.ymlchunk-gc一般
paper.ymlmax-chunk-sends-per-tick较好较大
paper.ymlmax-chunk-gens-per-tick较好较大
paper.ymldelay-chunk-unloads-by一般极小
global.confchunk-gc-load-threshold一般极小
global.confchunk-unload-delay一般极小
global.confdeny-chunk-requests较好一般





bukkit.ymlticks.per-autosave较差极小
paper.ymlmax-auto-save-chunks-per-tick中等
global.confauto-save-interval较差极小
global.confmax-chunk-unloads-per-tick一般较小


对于漏斗,有5项配置可以优化,这5项优化效果较好
配置文件配置项优化效果副作用
spigot.ymlticks-per.hopper-transfer一般较小
spigot.ymlticks-per.hopper-check较好极小
spigot.ymlhoppper-amount一般较小
paper.ymlhopper.disable-move-event较好较大



关于其他类型的优化,有1项配置可以优化
配置文件配置项优化效果副作用
paper.ymlTimings.enabled较差极小


更改配置文件虽然能大幅提升性能,但它不是万能的,如果你需要对服务器进行更好的优化,请打开折叠部分


更多


如果本贴有格式/语法问题,或者你希望我搬运更多教程文章,欢迎联系我!

搬运催更 & 问题反馈快速响应问卷 或在下方留下评论。
(0)
CnzwLv2-铁粒

相关推荐

帖子地址: 

发表回复

使用道具 举报