Skip to main content
Version: 1.21.4

调试分析器(Debug Profiler)

Minecraft 提供了一个调试分析器(Debug Profiler),它可以提供系统数据、当前游戏设置、JVM 数据、世界(level)数据,以及分端 tick 信息,帮助你定位耗时的代码。考虑到像 TickEvent 和被 tick 的 BlockEntity 这类内容,这对于想要查找卡顿源头的模组开发者和服务器管理员来说非常有用。

如何使用调试分析器(Using the Debug Profiler)

调试分析器(Debug Profiler)的使用非常简单。你只需要按下调试快捷键 F3 + L 来启动分析器。分析器会自动运行 10 秒后停止;当然,你也可以再次按下快捷键提前停止。

note

需要注意的是,你只能分析实际被执行到的代码路径。你想要分析的 EntityBlockEntity 必须实际存在于世界中,才能在结果中显示出来。

当你停止分析器后,它会在你的运行目录下的 debug/profiling 子目录中生成一个新的 zip 文件。 该文件名会以日期和时间命名,格式为 yyyy-mm-dd_hh_mi_ss-WorldName-VersionNumber.zip

阅读分析结果(Reading a Profiling result)

在每个分端文件夹(clientserver)中,你会找到一个名为 profiling.txt 的文件,里面包含了分析结果数据。在文件顶部,首先会告诉你分析器运行了多少毫秒,以及在这段时间内运行了多少 tick。

在这之后,你会看到类似下面这样的信息:

[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]tick99.31%95.81%
该部分的层级深度该部分的名称占其父节点耗时的百分比。对于第 0 层,这是相对于整个 tick 的百分比。对于第 1 层,是相对于其父节点的百分比。第二个百分比表示该部分占整个 tick 的耗时百分比。

分析你自己的代码(Profiling your own code)

调试分析器(Debug Profiler)对 EntityBlockEntity 提供了基础支持。如果你想分析其他内容,你可以像下面这样手动创建分析区段:

Profiler.get().push("yourSectionName");
// 这里写你想要分析的代码
Profiler.get().pop();

之后,你只需在分析结果文件中搜索你设定的区段名称即可。