如何分析生成的异常数量(按异常类或代码行分类)

And*_*rks 5 java profiling exception jmc jfr

我正在使用许多开源第三方库,飞行记录显示代码每秒生成数万个异常。

如何跟踪正在引发哪种类型的异常以及在源代码中的何处引发异常,以便我可以查看是否可以自己修复第三方代码?

据我所知,Java Mission Control 没有显示异常类型或来源的任何细分。

请不要推荐昂贵的商业分析器,因为这是一个开源项目。

Ale*_*zin 6

据我所知,Java Mission Control 没有显示异常类型或来源的任何细分。

这是不正确的,Java Mission Control 确实提供了该信息。

首先,您需要在 Flight Recorder 中启用异常跟踪(默认情况下仅跟踪 java.lang.Error 后代)。

请参阅下面的飞行记录器设置屏幕截图。

飞行记录仪选项

一旦记录器您需要转到“异常”报告。

在那里您可以找到按类别分类的异常情况细目。“堆栈跟踪”视图将允许获得准确的堆栈跟踪。

任务控制

我有点 JMC 实时黑客:在“堆栈跟踪”视图上打开上下文菜单,然后选择“区分帧依据”>“行号”(参见上面的屏幕截图)。这将使您可以看到行号。

如果您更喜欢 CLI 工具,请查看SJK(免责声明,这是我自己的 OSS 分析器)。例如,下面的命令将从 JFR 转储中生成异常的 SVG 火焰图。还有一些其他报告类型。

java -jar sjk.jar ssa -f dump.jfr --jfr-event THROW --flame > throw_flame.svg
Run Code Online (Sandbox Code Playgroud)

  • 请注意命令行使用,您需要为 JFR 创建一个新的设置文件,类似于 JDK 中包含的设置文件(默认和配置文件)。您可以使用 JMC 执行此操作并导出文件,或者复制 JDK/lib/jfr/profile.jfc 并将 jdk.JavaExceptionThrow#enabled 更改为 true。然后使用 `-XX:StartFlightRecording=settings=<path to the new file>......` 运行您的应用程序 (2认同)