【发布时间】:2020-05-25 14:25:55
【问题描述】:
我正在使用一些开源第三方库,飞行记录显示代码每秒产生数万个异常。
我如何追踪引发了哪种类型的异常,以及它在源代码中被引发的位置,以便我可以查看是否可以自己修复第三方代码?
据我所知,Java Mission Control 没有显示任何异常类型或来源的细分。
请不要推荐昂贵的商业分析器,因为这是针对开源项目的。
【问题讨论】:
标签: java exception profiling jmc jfr
我正在使用一些开源第三方库,飞行记录显示代码每秒产生数万个异常。
我如何追踪引发了哪种类型的异常,以及它在源代码中被引发的位置,以便我可以查看是否可以自己修复第三方代码?
据我所知,Java Mission Control 没有显示任何异常类型或来源的细分。
请不要推荐昂贵的商业分析器,因为这是针对开源项目的。
【问题讨论】:
标签: java exception profiling jmc jfr
据我所知,Java Mission Control 没有显示任何异常类型或来源的细分。
这不正确,Java Mission Control 确实提供了该信息。
首先您需要在 Flight Recorder 中启用异常跟踪(默认情况下只跟踪 java.lang.Error 后代)。
请参阅下面的飞行记录器设置屏幕截图。
一旦记录器你需要去“例外”报告。
您可以在其中找到按类别划分的异常情况。 “堆栈跟踪”视图将允许获得准确的堆栈跟踪。
I little JMC live hack:在“堆栈跟踪”视图中打开上下文菜单,然后选择“区分帧”>“行号”(参见上面的屏幕截图)。这将允许您查看行号。
如果您更喜欢 CLI 工具,请查看 SJK(免责声明,这是我自己的 OSS 分析器)。例如。下面的命令将从您的 JFR 转储中生成异常的 SVG 火焰图。其他报告类型也很少。
java -jar sjk.jar ssa -f dump.jfr --jfr-event THROW --flame > throw_flame.svg
【讨论】:
-XX:StartFlightRecording=settings=<path to the new file>...... 运行您的应用程序
请不要推荐昂贵的商业分析器,因为这是针对开源项目的。
一些商业分析器为开源项目提供免费许可证,例如JProfiler。
在 JProfiler 中,有一个探针显示按异常类分组的异常,并回溯到引发异常的调用堆栈。
免责声明:我公司开发 JProfiler。
【讨论】: