小默米
【优化】 针对1.16服务器的优化指南 | 让单端承载30+成为可能
   
Part.1服务端的选择

   
Paper是毫无疑问的,使用最广泛的服务端,它拥有出色的性能和稳定性,想必不需要我再多说。这也是我最推荐大家使用的(包括我自己也在使用).


Tuinity是Paper的一个分支,它的亮点在于彻底重写了Minecraft的光照,使得在大量玩家在线下获得高TPS的体验感.


Purpur是Paper的一个分支,它旨在为你的服务端定制一些更加有趣的玩法(例如单独设置各种生物的骑乘,改变游戏机制),同时也吸取了Tuinity的部分优化,自带掉落物异步和村民优化.


(!)在Tuinity和Purpur服务端中的TNT复制将会拥有独特的轨迹和延时哦~(讽刺的口气)



既然你是奔着服务器优化而来本帖,那么你可以直接抛弃这两个服务端,它们的优化效果会让你失望的.


Yatopia是Tuinity的fork,同时也是purpur的fork,那么它就意味着更加出色的性能!我不敢在此完全否定Yatopia,但是我希望提醒各位使用Yatopia的服主一定要谨慎对待这个服务端,它可能会出乎意料地带来一些bug.


Part.2JVM启动参数的优化


(!)Xms Xmx请根据自己的可用内存调整,往往实际占用会大于设定值(例如你的可用内存为10G,我建议你在启动参数中设置为9G)
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 paperclip.jar nogui

    -XX:G1NewSizePercent=40
    -XX:G1MaxNewSizePercent=50
    -XX:G1HeapRegionSize=16M
    -XX:G1ReservePercent=15
    -XX:InitiatingHeapOccupancyPercent=20

(√)Aikar的启动参数是在多年实践中总结而来,会带来更加稳定的TPS,因此各位不必担心使用这个启动参数会造成什么不良影响。如果你想详细了解这个启动参数,站内有相关搬运帖和分析帖,所以在此我不多浪费各位的时间,以最简洁的语言结束Part2部分.


Part.3配置文件优化

Server.properties






Bukkit.yml

spawn-limits默认值:推荐值:注释:更少的生物总量意味着更少的CPU的负担.
ticks-per
默认值推荐值
注释:①提高这些值将显著降低刷新生物的效率,例如将monster-spawns设置为2,那么刷怪速度相较原版将会减慢一半;
②bukkit自动保存常常会造成服务器瞬时的卡顿,所以我推荐使用Paper核心的自动保存,设置为0以禁用bukkit自动保存.
chunk-gc.period-in-ticks



Spigot.yml






①修改为更小值:因为我们之前在bukkit.yml中减小了刷怪上限,减小此值让刷怪数量显得更加“多”,变得似乎“正常”,但是这会改变原版刷怪的机制。同时导致玩家建造高效率刷怪塔更加容易(这可能会成为一种负优化).②保持不变:保留原版机制,建议同时提高bukkit.yml中的刷怪上限.


entity-activation-range:默认值:推荐值:注释:这控制着距离多少方块范围内的实体会被“激活”,在这范围之外的实体将会以“缓慢”的速度被计算以减少服务器lag.






Paper.yml

















anti-xray默认值:enabled: false   engine-mode: 1   max-chunk-section-index: 3   update-radius: 2推荐值:enabled: true   engine-mode: 2   max-chunk-section-index: 7   update-radius: 2Engine-mode: 1代表藏矿模式(可以防御xray材质包)Engine-mode: 2代表假矿模式,可以防御一切的作弊挖矿(除非种子被破译)在replacement-blocks: 增加注释:Paper核心自带的反xray是非常有效的,比任何插件都来得高效(占用约为10-15%)。有些人可能问为什么要这么做?首先我先解释一下什么是max-chunk-section-index,这一项指anti-xray生效的高度,计算方法是(x+1)*16,例如默认值3,指高度64及以下启用anti-xray,我推荐设置为7,是考虑到地狱128层,根据wiki,地狱顶部同样会生成远古残骸,否则玩家可以轻松利用矿透材质包获取大量远古残骸。其次就是反种子破译和反透视,利用末地传送门框架可以有效阻止SeedCracker破译你的服务器地图种子.有人说可以使用Antiseedcracker这个插件,但是我很负责任的告诉你,这个插件只能减慢破译的速度但是不能真正阻止玩家破译种子.个人观点:这一点CPU资源的支出是值得的,反矿透对服务器经济平衡有着关键的作用。有人此时会选择更加轻量的Moeka,但是请时刻牢记,Moeka无法保护你地图的种子。如果你追求极致优化,请关闭anti-xray,当我的话都没说.(跑题了,我们继续讲优化)


despawn-ranges
默认值:优化值:注释:在这里出现了分歧,分为以下两种观点:①hard不改变,可以导致玩家建造的部分刷怪塔刷怪效率下降。②hard减少,改变原版机制,让怪物能够更快直接消失,减少资源消耗。但是这样做的代价是玩家刷怪塔效率的提升,导致产生更多的计算。就我个人而言,我比较支持第一种,即不进行任何修改。站内有其他优化帖与我的观点是完全相反的,请各位斟酌改动。
no-tick-view-distance这是非常安全的设置,玩家几乎无法察觉那些不被计入tick的世界,当然你也可以激进一些采用如下的设置:这必然会带来服务器TPS的提升,但是我不能保证你的玩家能获得正常的游戏体验.
alt-item-despawn-rate
   enabled: true
   items:
  COBBLESTONE: 300
  NETHERRACK: 300
  TOTEM_OF_UNDYING: 300
  IRON_AXE: 200
  GOLDEN_SWORD: 200
  ROTTEN_FLESH: 300
  ENDER_PEARL: 200  STRING: 200  WHEAT_SEEDS: 200  BONE: 200  SPIDER_EYE: 200  GUNPOWDER: 200
     其他怪物掉落物/垃圾:一个较小的数值



Tuinity.yml


world-settings:
    world_the_end:
    spawn-limits:
   monsters: 20
   animals: 0
   water-ambient: 0
   water-animals: 0
   ambient: 0
注释:你可以单独设置各个世界的刷怪上限,上面只是我给出的对优化小黑塔有效的配置.




Purpur.yml


use-alternate-keepalive
默认值:false
推荐值:true
注释:设置为true将有效防止网络较差的玩家掉线.


dont-send-useless-entity-packets
默认值:false
推荐值:true
注释:防止服务器发送过多无意义的实体数据包.


Part.4安装优化插件

WorldBorder & chunky
使用worldborder对地图进行预加载,可以有效缓解跑图造成的CPU压力.在这里我不过多阐述,站内搬运帖
同样也可以使用Chunky
预加载地图是一件开服之前非常值得做的事,如果你的服务器核心数量不足,无法应对跑图生成新地图的压力,请预加载你的地图!


LimitPillagers
因为掠夺者而卡服?不妨试试这个插件,站内搬运帖


Villager Optimiser
可以略微减少过多村民造成的服务器卡顿,但是根本治理村民的方法是限制数量,站内搬运帖
Tuinity与Purpur已整合类似功能,不必重复安装.


MobFarmManager & JulySafe
限制数量才是治本之策,可以选取上方两款插件之一来限制区块内生物数量(例如村民、掠夺者)
如果你希望玩家能正常刷无限袭击,请卸载LimitPillagers并使用这两个插件.
在这里我给出我的MFM配置文件供大家参考(我更推荐MFM,更低的价格与更全面的区块生物管理)

MobfarmManagerSpigot原帖
JulySafe站内帖


优化的误区——你需要避免安装这些“优化插件”


本来就没有跟踪那么多实体,为什么还需要取消跟踪呢?


多余的检测只会增加服务器的Lag.(包括这些同类插件)


检测这些垃圾的一瞬间,其实突然增加了服务器的lag,你可以减少掉落物消失的时间来代替此功能,来获得更加稳定的TPS.


这些漏洞已经被Paper修复了,没必要增加这些多余的检测.


Part.5跨服同步 & 使用Mysql存储数据

终于走到这一步了吗?无论你优化做得有多么好,单端的承载能力是有极限的。可能你绞尽脑汁参考了各个优化帖,拼命对单端进行优化,最终又能多带几个人呢?单端无法承载的压力就需要多端分布承载。使用Mysql存储数据、开设资源服(而不是资源世界)镜像服。只要你的CPU核心足够,多开一个子服理论能多带100%的玩家。如果你是单端服主,想要突破人数上限,不可避免的就是走上跨服BC的道路(或者缺心眼压榨玩家的游戏体验获取单端极限优化)。我在此只是给各位一个思路,本指南仅针对单端优化,具体实现方式,站内的教程帖子有不少,我就不再啰嗦了。


本指南终,感谢您看到最后
如果本指南对你有帮助,请留下您的评分,这是对本指南的肯定
2021/1/20




tonym
不管辣么多 先贊一个!!!

尐紧张
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞

1060313419
好耶,终于更新啦!

phb2996690320
请问 JVM参数对 低版本有用吗?1.12.2cat端

RONGYAO749
补充一点:
关于network-compression-threshold选项的优化,对于上行带宽紧张的服主我非常不建议使用贴子中的参数。我更推荐你将此参数更改为0,即全部压缩,可以大幅度降低Minecraft服务器对服务器上行的占用。而这个选项中(0,64)这个区间参数是无效的,在这个区间内视作64进行压缩。
而把这个数值调大对于一定规模的服务器性能影响来说微不足道。但对于上行占用有一个很明显的降低。使30+的网络稳定连接成为可能。