Spigot Timings
获取计时数据
- 要获取计时数据,请运行
/timings on
- 然后,让它停留几分钟,然后运行
/timings paste
- 使用
/timings paste
给出的页面,以图形的形式显示输出。
了解定时器
Minecraft 的游戏循环是按 ticks 运行的。1 秒内有 20 刻,这意味着每 50 毫秒就会发生一刻。在其中一个 ticks 期间,各种事件被处理(来自游戏 ticks,如块的加载和玩家与块的互动),安装在服务器上的每个插件将以不同的方式处理这些事件(例如,像 WorldGuard 这样的插件使用 PlayerMoveEvent 来确保玩家不在他不该在的地方)。
这就是计时数据变得有用的地方。它们允许你监测安装在你的服务器上的插件需要多长时间来处理一个事件。这可以让你看到滞后问题出现的地方,因为一个行为不端的插件需要很长的时间来处理一个事件,可能会导致 tick 循环中的延迟,从而使服务器的每秒游戏刻低于 20。
使用 Aikar's timing parser
Aikar's timing parser 使得读取在你的服务器上收集的定时数据变得更加容易。计时报告被分为每个插件的不同部分。前两个部分是 Minecraft 自己的 tick 事件(处理加载/卸载实体、chunks 等),其余部分则按插件划分(按插件花费的总时间排序)。
在报告的顶部,有几个一般的数据点:
- Total: 处理事件的总时间。
- Sample Time:服务器为报告收集计时数据的总时间。
- Average Entities: 激活实体的平均数,其次是总实体的平均数。
- Average Players: 在样本时间内登录的玩家的平均数量。
- Average TPS:样本时间内服务器的平均每秒游戏刻。
在插件部分的标题中,在名称和版本之后有两个数据点:
- Total: 插件在样本时间内处理事件所花费的总时间。
- Pct: 这代表采样时间的百分比。
每个部分都有几列数据,每一个插件处理一个事件:
- Pct Total: 处理该事件所花费的总样本时间的百分比。计算方法: 总数 / 采样时间
- Pct Tick: 处理事件所花的单个 tick(50ms)的百分比。计算方法: 平均值 / 50
- Total: 在采样时间内花费的总时间。
- Avg:每个 tick 花费的平均时间。
- Count: 该事件被触发并由插件处理的次数。
- Vio: 该插件负责的总违规次数的百分比。违规次数是指一个定时器导致 TPS 损失的次数。
- Event: 事件的名称。
识别滞后
Pct Total 一栏是一个很好的指标,反映了整个服务器的 tick rate(TPS)。如果某个事件占用了大量的时间来处理,这可能意味着它是造成服务器迟缓的原因,因为大量的游戏循环都花在这一个事件上。
Pct Tick 一栏对于识别服务器滞后的峰值很有用。例如,如果你的玩家抱怨说只在登录时遇到了很大的滞后峰值,检查 PlayerJoinEvent 的时间是明智的。在 Pct Tick 栏中看到一个很大的数字,而在 Count 栏中看到一个很低的数字,这可能表明插件在处理该事件时花费了大量的时间,从而导致了滞后的峰值。再加上高的违规次数,这将意味着该插件是稳定的、重复的滞后峰值的一个几乎确定的原因。
因此,检查时间报告对于找到服务器上滞后的根本原因很有用。如果你看到一个特定的插件在处理某个事件时占用了大量的时间,这就很好地说明了该插件导致了你的服务器滞后。当然,立即找开发商麻烦是不明智的,因为在处理滞后问题时,还有许多其他因素在起作用,如服务器硬件、使用 "S" 的延迟等。