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

How to profile the number of exceptions generated, categorized by exception class or line of code

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

如何追踪抛出的异常类型,以及在源代码中的哪个位置抛出,以便我可以查看是否可以自行修复第三方代码?

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

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

Please do not recommend expensive commercial profilers, as this is for an open source project.

一些商业分析器为开源项目提供免费许可证,例如 JProfiler

在 JProfiler 中,有一个探测器显示按异常 class 分组的异常,并回溯到它们被抛出的调用堆栈。

免责声明:我公司开发了 JProfiler。

Java Mission Control does not show any breakdown of exception types or sources, as far as I can see.

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

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

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

一旦记录器你需要去"Exceptions"报告。

在那里您可以找到 class 的异常细分。 "Stack Trace" 视图将允许获得准确的堆栈跟踪。

我是 JMC 的小黑客:在 "Stack Trace" 视图和 select "Distinguish Frames By" > "Line Number" 上添加上下文菜单(见上面的屏幕截图)。这样您就可以看到行号。

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

java -jar sjk.jar ssa -f dump.jfr --jfr-event THROW --flame > throw_flame.svg