• 200金粒签到奖励和周年纪念勋章(4/5/6/7周年)销售将于 4月13日晚结束,不要错过噢!【点我去看看】

教程 Java服务器🛶深度优化指南 (编写中)

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)将是有利的,因为内部网络速度通常可以处理额外的未压缩流量。
purpur.yml
use-alternate-keepalive

  • 推荐值:true
  • 启用Purpur的备用保持连接系统,这样网络连接较差的玩家不会经常超时。已知与TCPShield不兼容。
  • 作用:每秒向玩家发送一个保持连接的数据包,并且只有在30秒内未响应任何数据包时才会超时踢出。响应任何一个数据包都会保持玩家连接。这意味着玩家不会因为某个数据包在传输过程中丢失而被踢出。

区块配置

合理配置区块加载和模拟距离,可以显著提高服务器性能,同时保证玩家体验。以下是关于区块配置的建议:

server.properties
simulation-distance

  • 推荐值:4
  • 模拟距离是指玩家周围的区块数,服务器会对这些区块进行 tick 处理。这包括熔炉烧炼、作物和树苗生长等。建议将此选项设置较低,大约为3或4,因为存在视距(view-distance)选项。这允许加载更多的区块而无需对其进行tick处理,有效地使玩家可以看到更远的地方,而不会对性能产生同样的影响。
view-distance
  • 推荐值: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
  • 该选项允许你配置玩家离开后区块保持加载的时间。这有助于避免玩家来回移动时不断加载和卸载同一块区块。设置过高的值可能导致同时加载过多区块。在频繁传送和加载的区域,考虑让这些区域永久保持加载状态,这比不断加载和卸载区块对服务器的负担更小。
max-auto-save-chunks-per-tick
  • 推荐值:8
  • 允许你通过更长时间分散任务来减缓增量世界保存,以获得更好的平均性能。如果有超过20-30个玩家,可能需要将此值设置为高于8。如果增量保存无法及时完成,bukkit会自动一次性保存剩余区块,并重新开始该过程。
prevent-moving-into-unloaded-chunks
  • 推荐值:true
  • 启用后,防止玩家移动到未加载的区块,避免同步加载导致主线程卡顿。视距越低,玩家进入未加载区块的概率越高。
entity-per-chunk-save-limit
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
通过此配置项,你可以设置每种指定类型实体的保存数量限制。特别是对于投射物,建议设置一个限制,以避免大量投射物被保存导致服务器在加载时崩溃。你可以在这里添加任何实体ID,请参阅Minecraft Wiki查找实体ID。根据需要调整限制值。对于所有投射物,建议的值约为 10。你也可以根据实体类型名称将其他实体添加到列表中。此配置项的设计初衷不是为了防止玩家创建大型刷怪农场。

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
限制生物生成的公式是 [玩家数量] * [限制],其中“玩家数量”是服务器上当前的玩家数量。逻辑上,数值越小,生成的生物数量就越少。per-player-mob-spawn 选项为此公式增加了一个额外的限制,确保生物在玩家之间均匀分布。减少这个值是双刃剑;虽然服务器的工作量减少了,但在某些游戏模式中,自然生成的生物是游戏的重要组成部分。如果你适当地调整 mob-spawn-range,你可以将这个值降低到20或更少。将 mob-spawn-range 设置得更低,会让每个玩家周围的生物看起来更多。如果你使用的是 Paper,你可以在 `paper-world` 配置中为每个世界设置生物限制。

写不动了,歇会(
 
内容版权许可
CC BY-NC-SA 署名-非商业性使用-相同方式共享
最后编辑:
版主大大,笨蛋文档里已经有人进行了完整的翻译了,需要的话可以自取。
 

在线会员

  • 赤_焰
  • 1832767678
  • umaru
  • 一位随缘玩家
  • XBen
  • minglaoban666
  • 没钱的山海
  • ewsk
后退
顶部 底部