Enderaoe
标注: 本帖为spigotmc上[GUIDE] Optimizing Spigot - Remove lag, Fix tps & Improve performance!的翻译与附注. 原帖在spigotmc十分知名, 在此翻译供服主借鉴.

Spigot预设关闭了很多性能调优选项,因为这些选项会改变服务器,使其不按照默认行为运行。这篇指南希望能够帮助你调整这些选项来达到最优性能,并且同时令你知晓自己究竟做了什么改变。如果你不了解这里列举的某个选项,还望不要修改。如果你十分好奇,请在贴下[1]回复(记得艾特我)来询问这个选项究竟是做什么的。如果你仍然有性能问题,使用[2]timings(2-5分钟)之后[1]回复在这里,或是开一个新帖发布。
附注1:“回复”指原帖地址而非本帖
附注2:timings是一种服务器数据收集方式,在这里不做赘述


我会列举所有你可以调整来优化性能的选项,并同时尽我所能解说选项的功能,以及什么时候你希望修改与不希望修改它。


这篇指南目前为[1]1.9版本服务器书写。大部分选项也对1.8生效。如果有未生效选项,请直接跳过。
附注1:该指南对最新的1.12仍生效,原帖书写时最新版为1.9


1. paper.yml

你需要使用Paper服务端(一个Spigot的分支服务端)来令下面的选项生效。
警告:Paper并不是SpigotMC的官方版本,因而不会受到官方支持。它略有不稳定,但花销更小且运行更快。
如果你在使用Paper时遇到问题,应将其发到Paper's issue tracker,而非SpigotMC。
另外,在[1]回复中包括任何与Paper相关的内容都是不允许的,将会导致回复被删除或将帖子锁定。
附注1:“回复”指原帖而非本帖,您可以在本帖回复


optimize-explosions
默认: false
推荐: true
使用一种可替代的,更加高效的爆炸算法。瞬间移除爆炸中所有死亡的生物。

mob-spawner-tick-rate
默认: 1
推荐: 2-3
改变刷怪笼生成怪物间隔的ticks。
设定为2不会过多影响原版内容。如果刷怪笼正在令你的服务器卡顿,这会是一个很棒的改善。
disable-chest-cat-detection
默认: false
推荐: true
禁用箱子吸引豹猫/豹猫坐在箱子上的功能,会令玩家依旧能打开坐着豹猫的箱子。
(提升性能)
use-hopper-check
默认: false
推荐: true
spigot.yml中的“hopper-check”选项会被忽略,令你高效地检测漏斗活动更加困难。这里可以重新开启它。
container-update-tick-rate
默认: 1
推荐: 3-4
调整容器刷新(玩家、箱子、其他容器)频率。如果设定超过5,容器将会看起来像卡顿或反应迟缓。
queue-light-updates
默认: false
推荐: true
尝试动态更新光照。异步光照处理在1.9暂时禁用,该项功能可以在修复前替代它。
fire-physics-event-for-redstone
默认: true
推荐: false
停止红石触发BlockPhysicsEvent。
许多插件会监视BlockPhysicsEvent,但却不对红石做任何操作。
部分服务器可以令红石闪烁频率极高,这样的监视会浪费大量的CPU。
该选项对红石卡顿将会是一个极大改善。
grass-spread-tick-rate
默认: 1
推荐: 2-4
草地蔓延间隔。
提高该选项会降低草地蔓延速率!请确定您为自己的服务器设定一个合适值。
例如:空岛服务器或许不会改变该项。


2. spigot.yml


late-bind
默认: false
推荐: true
该项不会改善任何性能并且可能会令某些插件崩溃
这会让服务器在加载完全部插件前禁止任何公网连接。我个人将其视为一次好的尝试与服务器安全保障,但它如何操作取决于你。
mob-spawn-range
默认: 4
推荐: 3
控制单次怪物生成的范围半径。
我们将要降低怪物生成频率与数量,因此降低该项可以令玩家感觉怪物生成未被降低过。
entity-activation-range
默认: animals:32, monsters:32, misc:16
推荐: animals:6, monsters:16, misc:2
在这个范围之外的怪物将被降低交互频率。总体来看动物不需要太大范围。“misc”是例如掉落物品的实体。设置为1可能会阻止掉落物品的某些行为,例如被水流冲走。
在实体优化中起主要作用
hopper-transfer, hopper-check, hopper-amount
默认: transfer:8, check:8, amount:1
推荐: transfer:24, check:24, amount:3
这会让漏斗处理放缓为原1/3频率,但一次传递3倍的物品。这会影响部分原版行为,尤其是基于漏斗计时的红石钟表。在漏斗卡顿优化中起主要作用请确保paper.yml中的“use-hopper-check”已开启
max-entity-collisions
默认: 8
推荐: 1-2
每tick中某个实体触发碰撞的次数。将它设定为1通常不会有副作用。对怪物农场帮助很大。
merge-radius
默认: item:2.5, exp:3.0
推荐: item:3.5, exp:6.0
物品合并功能是阻止掉落物卡顿的强大方式(不要再用ClearLag了!)。设置item属性到3.5意味着在3.5格半径内的物品将被合并为一簇物品。exp合并范围略大不会有显著的副作用。
view-distance
默认: 10
推荐: 3-5
设置发送多少区块给玩家。我个人建议为4,设定为3将会导致末影珍珠被丢进未加载区块而失效。


3. bukkit.yml


spawn-limits
默认: monsters:70, animals:15, water-animals:5, ambient:15
推荐: monsters:50, animals:10, water-animals:3, ambient:4
这些数据比单纯的“每玩家允许生物数”更复杂,但它们的功能大致相同。设置这些数据更低将会在玩家周围生成更少的生物。你拥有的玩家越多,就可以安全地将这些数据降得更低。
chunk-gc
默认: period-in-ticks:600, load-threshold:0
推荐: period-in-ticks:300, load-threshold:300
据我所知,由于某些原因,这个功能默认被禁用了(load-threshold被设为0)。
这个选项将会卸载不需要的区块(在玩家视野范围外),释放内存和潜在的CPU资源。
ticks-per.monster-spawns
默认: 1
推荐: 2-5
控制服务器尝试生成敌对生物的频率。这会受整个服务器影响,而不是单个玩家。设置该项越高将会使生成的怪物越少。我建议设置为2除非服务器在怪物生成函数上消耗了大量性能,或是有太多怪物。


4. server.properties



network-compression-threshold
默认: 256
推荐(对非群组服而言): 512
该项控制压缩前每个数据包的大小。
将它设置更高将可以节约CPU资源而增加网络占用,设置为-1将会禁用该功能。
如果你的服务器是一个同服务器上BC端的子服或是与BC端处于一个数据中心(2ms延迟以下),禁用这个功能将会更有益处。如果你的玩家直接连接服务器,设置它为512将可以节约一些CPU资源,而增加网络占用。


5. Java & 启动参数


时刻确保你在使用最新版的Java!(当前为Java8)
某些功能仅在Java 8上启用,同时收获更好的性能表现。
如果你由于某些原因仍在使用java 7,你需要在启动脚本中添加-XX:MaxPermSize=128M参数。


有些人会告诉你启动参数没什么实际作用,你只需要写-Xmx就可以了。
大部分上这是正确的。但是,垃圾回收器在性能调优和内存优化上占很大一部分功劳。而按我们需要调整垃圾回收器最好的方式就是使用启动参数。
@Aikar花费了大量时间与精力来研究与测试不同的垃圾回收器参数,并推荐了下面的启动参数:
  1. java -Xmx8G -Xms8G -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=45 -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=50 -XX:+AggressiveOpts -jar spigot.jar
复制代码
参数在@Aikar文章中详细解释。

大内存页Large Pages也可以提升不少内存性能:
  1. -XX:LargePageSizeInBytes=2M -XX:+UseLargePages -XX:+UseLargePagesInMetaspace
复制代码
但是,这需要你Linux系统方面的配置,并有潜在的损坏危险。请仅在你了解什么是Large Pages以及如何设置它
的前提下使用。
@Aikar对正确设定的建议如下:
Large Pages不太可能预设就正确。他们只会是糟糕的默认OS设置。

再设置它之前,你需要做一些工作。

1)确认你总计拥有多少内存
2)确认你需要分配给Minecraft多少内存
3)预留给你的系统一些在MC之外的活动空间!如果你有16GB,分配给MC最多14GB。系统需要内存来存储缓存!
4)考虑基于MC运行的其他进程,分配给MC更少的空间
5)选择你的MC对象,再略微增加一点,例如8GB给MC,就分9GB给Large Pages
6)使用2MB的分页,9GB将被分为4500页
7)确保4500页被安装了10GB~最大SHMMAX系统控制配置
注意:-XX:+UseLargePagesInMetaspace仅在Java 8下生效!


如果上述设置没能改善你的实体问题,你也需要考虑使用例如ClearLagg的插件。我不建议使用ClearLagg自带的实体清理功能。当你下载插件后请禁用它们。你会对例如mob-rangechunk-entity-limiter的功能很感兴趣。


你已经完成了!如果你依然有性能问题,请随意使用timings(2-5分钟)然后粘贴结果到这里,或是开一个新帖。

zlzchuyue
不错。虽然部分跟论坛里的重复,不过也有新东西

chinaptao
请问spigotmc 服务器怎么弄才能使用工业MOD

jwx233
chinaptao 发表于 2017-8-7 14:30
请问spigotmc 服务器怎么弄才能使用工业MOD

那个不是mod的开服核心 是弄不了的

543589341
楼主66666666666