诊断Minecraft服务器延迟和低TPS

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

Minecraft的工作原理(什么导致延迟?)

了解导致延迟的原因的关键是了解Minecraft的工作方式。我的世界服务器软件都以类似的方式运行,但有一个关键问题:主游戏循环没有多线程或计时限制。当服务器转到tic时,它将运行每个TileEntity更新,实体更新,块更新,事件和其他过程,直到完成为止。所有这些都在一个线程上发生,并且下一个循环要等到当前线程完成后才能开始。世界不会更新,玩家不会出现移动,并且实体将被冻结在原地。理想情况下,每个tic的间隔时间应不超过50ms,以保持每秒20 Tics(TPS)。对于18 TPS,此问题可降至55.55毫秒,而问题最少。低于此值,您将开始看到滞后。

滞后的典型原因

有许多因素可能导致延迟,但其中一些是大多数服务器最有可能的罪魁祸首。

文件使用:任何不断从播放器文件读取的插件,尤其是在发生移动,损坏或互动等事件时。一些示例是一些PVP标志或Glow插件,这些插件将不断从播放器文件中读取。
平面文件作为数据库:当您有使用大文件的插件来跟踪通过该文件或在内存中进行迭代的大量数据时,这取决于存储方式将花费很长时间。许多插件会这样做,并且不会对数据库precaution肿时如何处理时间会影响服务器tic采取预防措施。加载大型MagicSpells配置时,或者使用使用YAML而不是适当的数据库(例如PEX和GroupManager)的权限系统时,您会经常看到这一点。
太多操作:当插件产生太多实体,或尝试对诸如移动之类的事件执行复杂的任务时,您将开始看到滞后。即使每次运行时间少于1毫秒,当您每秒处理20k次事件时,事件也将成指数级。可能导致这种情况的插件是世界编辑插件,例如VoxelSniper和WorldEdit。或“反作弊”和“世界保护”之类的保护插件。
加载的块太多:一个块是 16*16*256。这听起来可能并不多,但相乘意味着每个块有65,536个块。根据您的配置,每个播放器周围可以装载200个以上的块。那就是13,107,200块以上。这会占用大量内存。此外,即使其中的1%是TileEntities,即已加载的131,072个TileEntities也需要更新每个tic。 Mods因在TileEntities上的处理时间较慢而臭名昭著。
级联WorldGen:这是当插件或mod在给定的块之外生成结构时。如果下一个块也开始有结构溢出到下一个块中,则这将导致下一个块加载,生成并再次触发。这对创建者来说是不好的设计,任何执行此操作的插件或模块都应立即删除。
瓷砖实体:请参阅 护目镜 下面的部分。

由于大多数Minecraft服务器软件都是使用包含的分析工具构建的,因此,如今发现延迟的原因通常是一个简单的过程。

Spigot / PaperSpigot的时间报告

要获取详细的时序报告,可以使用以下命令。

/timings on

您将需要等待几分钟,并在计时运行时让它滞后。一段时间后,生成报告。

/timings paste

这将为您提供一个指向网站的链接,其中包含报告的详细分类,并提供简单的选项来筛选您所获取的所有数据。您可以在Spigot’s了解更多有关如何阅读这些内容的信息。 计时维基

之后,您将需要关闭计时,因为您不希望垃圾数据阻塞您的下一次阅读,而计时会增加抽查的时间。

/timings off

海绵计时报告

要获取详细的时序报告,可以使用以下命令。

/sponge timings on

您将需要等待几分钟,并在计时运行时让它滞后。一段时间后,生成报告。

/sponge timings report

这将为您提供一个指向网站的链接,其中包含报告的详细分类,并提供简单的选项来筛选您所获取的所有数据。由于Sponge的计时系统是基于Spigot的,因此您可以在Spigot的网站上了解更多有关如何阅读这些信息的信息。 计时维基

之后,您将需要关闭计时,因为您不希望垃圾数据阻塞您的下一次阅读,而计时会增加抽查的时间。

/sponge timings off

您还可以重置计时。

/sponge timings reset

减少滞后的步骤

为脚本文件使用适当的参数以启动Minecraft。了解有关适当的Java参数的更多信息 这里
使用LuckPerms或使用适当数据库而不是平面文件的权限管理器
完全避免块加载器
删除所有导致级联世界生成的内容
限制Anti Cheat插件不要过分热心
限制玩家的观看距离 server.properties
在设定的时间段后清除敌对生物
每天重新启动服务器以清理Java泄漏
切勿重新加载服务器,这会导致泄漏和其他问题
使用插件的FastAsync版本,例如WorldEdit和VoxelSniper
限制您的世界的大小,以便不会不断创建新的块
限制您使用的插件数量。并非所有插件都构建良好,并且您拥有的插件越多,您将遇到的问题就越多

护目镜

改装服务器上的大部分滞后来自图块实体。这些是为块创建的实体,用于处理块的功能和事件。如果这些花费的时间太长或太多,则可能会增加每次抽查的时间,从而降低整个服务器的TPS。可视化这些问题的一种方法是使用称为LagGoggles的mod。您可以从下载此mod 诅咒之力

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com