调试分析器

调试分析器

Minecraft 提供调试分析器,可显示系统数据、当前游戏设置、JVM 数据、世界数据以及各端的刻(tick)信息,帮助找出耗时的代码。对于想定位卡顿来源的 Mod 开发者和服务器管理员,这项功能很有用,尤其适用于分析 TickEvent 和逐刻更新的 BlockEntity 等内容。

使用调试分析器

调试分析器的使用非常简单。按下调试快捷键 F3 + L 即可开始分析。10 秒后分析会自动停止;也可以再次按下快捷键提前停止。

提示 分析器只能记录实际执行到的代码路径。要分析的 Entity 和 BlockEntity 必须存在于世界中,才会显示在结果里。

停止分析后,程序会在运行目录的 debug/profiling 子目录中创建一个 ZIP 文件。文件名按日期和时间格式化为 yyyy-mm-dd_hh_mi_ss-WorldName-VersionNumber.zip。

阅读分析结果

在每个端对应的文件夹(client 和 server)中,都能找到包含结果数据的 profiling.txt 文件。文件顶部会先说明分析持续了多少毫秒,以及这段时间内运行了多少刻。

下面是结果片段示例:

[00] levels - 96.70%/96.70%
[01] |   Level Name - 99.76%/96.47%
[02] |   |   tick - 99.31%/95.81%
[03] |   |   |   entities - 47.72%/45.72%
[04] |   |   |   |   regular - 98.32%/44.95%
[04] |   |   |   |   blockEntities - 0.90%/0.41%
[05] |   |   |   |   |   unspecified - 64.26%/0.26%
[05] |   |   |   |   |   minecraft:furnace - 33.35%/0.14%
[05] |   |   |   |   |   minecraft:chest - 2.39%/0.01%

各列的含义如下:

示例 含义
[02] 区段深度。
tick 区段名称。
99.31% 该区段相对于父区段所占的时间比例。第 0 层表示占一个 tick 的比例,第 1 层表示占父区段的比例。
95.81% 该区段占整个 tick 的时间比例。

分析自己的代码

调试分析器对 Entity 和 BlockEntity 提供了基本支持。要分析其他内容,可能需要手动创建区段,例如:

ProfilerFiller#push(yourSectionName : String);
//The code you want to profile
ProfilerFiller#pop();

可以从 Level、MinecraftServer 或 Minecraft 实例中获取 ProfilerFiller。之后只需在结果文件中搜索你的区段名称。


来源: NeoForged/Documentation(1.21.1)。中文翻译依据提交 4a680cdd4d15。