空空叶博客 学习与开发博客

MC服务器性能检测

2017-05-19

本文介绍如何使用服务端内置的timings来检测服务端性能.

注: 本文使用的服务端是spigot,版本为1.11.2

一. timings介绍

官方文档

timings主要用来检测各插件在事件处理(Event handling)上花费的时间.

首先介绍一下tick,它相当于游戏循环(game loop), 正常情况下服务端1秒执行20次tick,即每50毫秒执行1次tick. 每次执行tick都有好多事要做,像实体运动,区块加载,玩家与方块交互等,一些会产生事件,而事件会被插件同步处理.

如果服务端1秒钟执行完20次tick,那TPS(tick per second)(翻译过来就是tick每秒)就是20, 如果在执行某次tick时,因为某个插件的关系,执行得很慢,比如花费了100毫秒,那么这1秒钟就只能执行19次tick了,也就是说TPS只有19, 因此TPS的范围在0到20之间,值越大表示服务器越流畅.

什么时候开启timings?

一般在服务器卡顿的时候适合开启timings检测

如何开启timings?

在控制后台输入timings on即可开启

检测耗时需要多久?

一般至少1分钟

如何查看检测结果

在控制后台输入timings paste,等待几秒钟,服务端收集与上传完后,会显示类似[21:22:05 INFO]: Timings results can be viewed at https://www.spigotmc.org/go/timings?url=riwifakoco的提示,把提示中的链接复制到浏览器地址栏,打开网页即可看到结果.

关于bukkit.yml里的plugin-profiling

根据bukkit.yml的官方文档的介绍,此值设置成true时允许使用命令/timings

但新版本的spigot做了优化,即使此值设置成false,也可以手动输入指令开启timings, 而此值设置成true时,服务端启动后会自动开启timings浪费服务器资源, 因此spigot官方推荐设置此值为false.

二. timings结果说明

1. 报告顶部

报告顶部显示总的信息,包括:

  • Total: 处理事件的总时间
  • Sample Time: 此次检测花费的时间
  • Average Entities: (平均)活跃的实体数/总实体数
  • Average Players: (平均)玩家数
  • Average TPS: (平均)TPS

2. 每块区域顶部

每块区域的顶部包含几个信息,包括:

  • Total: 此插件处理事件的总时间
  • Pct: 耗时百分比(=Total/Sample Time)

3. 每块区域主体

每块区域主体包含一些列,包括:

  • Pct Total: 同上,百分比(=Total/Sample Time)
  • Pct Tick: 百分比(=Avg/50)
  • Total: 类似上面的,是执行花费的总时间
  • Avg: (平均)每tick花费的时间(=Total/Count)
  • Count: 执行次数
  • Event: 事件名(也不一定全是事件,计时器什么的也都算)

三. timings结果如何看?

  • Pct Total影响服务端总体TPS(如果某项值比较高,说明可能是它导致服务器缓慢)
  • Pct Tick指示服务端顿卡的现象(如果某项值比较高,说明服务器顿卡可能是它引起的)

举个例子,在某一tick进行世界保存,花费了0.8秒(正常1tick才50毫秒),因此游戏中的玩家会感觉顿卡,timings显示世界保存的Pct Tick列值非常高

再举个例子,某个经济插件需要访问外部的数据库,因此执行较为缓慢,而游戏中改变玩家金钱的情况非常多,导致经济插件的Pct Total列值非常高,整个服务器TPS下降,玩家感觉游戏变得不流畅

四. 部分事件介绍

以下主要来自官方文档的翻译.

Plugin Scheduler

指由插件处理的单个或重复的同步计时器任务

Full Server Tick

此项可以看做服务器性能的代表,如果此项的Pct Tick列的值比较高,服务器就可能损失TPS. 此项没什么办法提高,你只能从其它地方来提高性能.

Activated Entities

活跃的实体是一个影响性能很重要的因素,spigot.yml的世界配置里有个entity-activation-range项,当实体与玩家的距离超过配置的范围时,实体就会变成不活跃的状态,而此状态的实体会减少95%的性能花费!如果服务器实体很多,那么此项对性能的影响会很大.

(官方提示: misc活跃范围减少到4可以防止大量掉落的物体卡顿,animals活跃范围减少到12可以减少动物养殖场导致的性能问题,monsters减少到24不会对游戏体验造成太大影响,但会提高性能)

Connection Handler或Player Tick

如果此值比较高,并不能说明问题出在此项上,可能是其它插件问题(因为其它事件也可能被计算到此项内),但也可能是你服务器玩家过多超过了服务器的承受能力.

推荐spigot.yml配置里的player-shuffle值为0,否则此项会造成更多的性能消耗.


目录