- 查看: 2K
- 回复: 2
Minecraft 服务器深度优化指南
注意:对于使用Vanilla、Fabric或Spigot(或任何非Paper版本)的用户,请前往你的server.properties文件,将sync-chunk-writes更改为false。在Paper及其衍生版本中,此选项强制设置为false,但在其他服务器核心中,你需要手动将其设置为false。这允许服务器在主线程之外保存区块,减轻主循环的负载。本教程适用于 1.21 版本,一些内容可能仍适用于 1.15 - 1.20 版本。
本帖为搬运优化 Github 知名优化教程,已经过非常多服主的检验,稳定且有效。
前言
没有任何一个教程可以为你提供完美的结果。每个服务器都有自己的需求和限制,你愿意牺牲多少资源来优化它。这就是调整设置以满足你服务器需求的全部内容。本教程旨在帮助你理解哪些选项会影响性能,以及它们具体改变了什么。如果你有任何问题或反馈内容,可以加入交流群 1104261361
准备工作
服务器核心
你选择的服务器核心对性能和API有着巨大的影响。目前有多种可行的流行服务器JAR,但也有一些由于各种原因你应该避开的。推荐的选择:
- Paper:最流行的服务器核心,旨在提高性能,同时修复游戏和机制的不一致性。
- Pufferfish:Paper的衍生版本,旨在进一步提高服务器性能。
- Purpur:专注于功能和自定义自由的Pufferfish衍生版本。
- 任何声称异步处理的付费服务器JAR——99.99%的可能性是骗局。
- Bukkit/CraftBukkit/Spigot——在性能方面相对于你可以访问的其他服务器核心来说极其过时。
- 任何在运行时启用/禁用/重新加载插件的插件/软件。查看此部分以了解原因。
- 许多从Pufferfish或Purpur进一步下游的衍生版本会遇到不稳定和其他问题。如果你寻求更多的性能提升,请优化你的服务器或投资个人的私人衍生版本。
地图预生成
由于近年来对区块生成进行了各种优化,地图预生成现在仅对那些CPU性能极差、单线程或受限的服务器有用。然而,预生成通常用于为诸如 Pl3xMap 或 Dynmap 等世界地图插件生成区块。如果你仍然希望预生成世界,可以使用诸如 Chunky 之类的插件来完成。确保设置一个世界边界,以防止玩家生成新的区块!请注意,根据你在预生成插件中设置的半径,预生成有时可能需要数小时。记住,在使用Paper及其以上版本时,你的TPS不会受到区块加载的影响,但当服务器CPU过载时,区块加载速度会显著减慢。
关键要记住的是,主世界、地狱和末地都有各自独立的世界边界,需要为每个世界分别设置。地狱维度比主世界小8倍(如果没有使用数据包进行修改),因此如果你设置错误,玩家可能会跑到世界边界之外!
务必设置一个原版的世界边界(/worldborder set [直径]),因为它限制了一些功能,例如藏宝图的查找范围,这些功能可能会导致卡顿。
开始优化
网络配置
优化服务器的网络配置可以显著提高性能和玩家体验。以下是一些关键的网络配置选项及其建议设置:server.properties
network-compression-threshold
- 推荐值:256
- 该选项允许你设置数据包在压缩前的大小上限。将其设置得更高可以节省一些CPU资源,但会增加带宽消耗。将其设置为-1会禁用压缩。设置过高可能会影响网络连接较慢的客户端。如果你的服务器位于代理网络中或与代理在同一台机器上(延迟小于2毫秒),禁用此选项(设置为-1)将是有利的,因为内部网络速度通常可以处理额外的未压缩流量。
use-alternate-keepalive
- 推荐值:true
- 启用Purpur的备用保持连接系统,这样网络连接较差的玩家不会经常超时。已知与TCPShield不兼容。
- 作用:每秒向玩家发送一个保持连接的数据包,并且只有在30秒内未响应任何数据包时才会超时踢出。响应任何一个数据包都会保持玩家连接。这意味着玩家不会因为某个数据包在传输过程中丢失而被踢出。
区块配置
合理配置区块加载和模拟距离,可以显著提高服务器性能,同时保证玩家体验。以下是关于区块配置的建议:server.properties
simulation-distance
- 推荐值:4
- 模拟距离是指玩家周围的区块数,服务器会对这些区块进行 tick 处理。这包括熔炉烧炼、作物和树苗生长等。建议将此选项设置较低,大约为3或4,因为存在视距(view-distance)选项。这允许加载更多的区块而无需对其进行tick处理,有效地使玩家可以看到更远的地方,而不会对性能产生同样的影响。
- 推荐值:7
- 这是会发送给玩家的区块距离,类似于Paper中的no-tick视距(no-tick-view-distance)。
- 总视距: 总视距等于simulation-distance和view-distance中较大的值。例如,如果模拟距离设置为4,视距设置为12,那么发送给客户端的总距离将是12个区块。
spigot.yml
view-distance
- 推荐值:default
- 如果没有设置为默认值,该值将覆盖 server.properties 中的视距。建议保持默认值,以便于在一个地方快捷管理模拟距离和视距。
paper-world configuration
delay-chunk-unloads-by
- 推荐值:10s
- 该选项允许你配置玩家离开后区块保持加载的时间。这有助于避免玩家来回移动时不断加载和卸载同一块区块。设置过高的值可能导致同时加载过多区块。在频繁传送和加载的区域,考虑让这些区域永久保持加载状态,这比不断加载和卸载区块对服务器的负担更小。
- 推荐值:8
- 允许你通过更长时间分散任务来减缓增量世界保存,以获得更好的平均性能。如果有超过20-30个玩家,可能需要将此值设置为高于8。如果增量保存无法及时完成,bukkit会自动一次性保存剩余区块,并重新开始该过程。
- 推荐值:true
- 启用后,防止玩家移动到未加载的区块,避免同步加载导致主线程卡顿。视距越低,玩家进入未加载区块的概率越高。
YAML:
推荐的设置:
area_effect_cloud: 8
arrow: 16
dragon_fireball: 3
egg: 8
ender_pearl: 8
experience_bottle: 3
experience_orb: 16
eye_of_ender: 8
fireball: 8
firework_rocket: 8
llama_spit: 3
potion: 8
shulker_bullet: 8
small_fireball: 8
snowball: 8
spectral_arrow: 16
trident: 16
wither_skull: 4
pufferfish.yml
max-loads-per-projectile
- 推荐值:8
- 此配置项用于指定投射物在其生命周期内可以加载的最大区块数量。减少该值可以减少由于投射物实体导致的区块加载,但可能会导致三叉戟、末影珍珠等投射物出现问题。
生物配置
bukkit.yml
spawn-limits
YAML:
推荐的设置:
monsters: 20
animals: 5
water-animals: 2
water-ambient: 2
water-underground-creature: 3
axolotls: 3
ambient: 1
写不动了,歇会(
- 内容版权许可
- CC BY-NC-SA 署名-非商业性使用-相同方式共享
最后编辑: