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

Java 如何分析生成的异常数量,按异常类或代码行分类,java,exception,profiling,jmc,jfr,Java,Exception,Profiling,Jmc,Jfr,我使用了许多开源的第三方库,飞行记录显示代码每秒生成数万个异常 如何跟踪抛出的异常类型,以及在源代码中抛出的位置,以便查看是否可以自己修复第三方代码 据我所见,Java任务控制没有显示任何异常类型或源的细分 请不要推荐昂贵的商业分析器,因为这是一个开源项目 请不要推荐昂贵的商业分析器,因为这是一个开源项目 一些商业分析器为开源项目提供免费许可证,如 在JProfiler中,有一个探测,它显示按异常类分组的异常,并返回到抛出异常的调用堆栈 免责声明:我公司开发JProfiler 据我所见,Jav

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

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

据我所见,Java任务控制没有显示任何异常类型或源的细分

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

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

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

在JProfiler中,有一个探测,它显示按异常类分组的异常,并返回到抛出异常的调用堆栈

免责声明:我公司开发JProfiler

据我所见,Java任务控制没有显示任何异常类型或源的细分

这是不正确的,Java任务控制确实提供了这些信息

首先,您需要在Flight Recorder中启用异常跟踪(默认情况下,只跟踪java.lang.Error子体)

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

记录后,您需要转到“异常”报告

在这里,您可以找到异常的分类。“堆栈跟踪”视图允许获得精确的堆栈跟踪

I little JMC live hack:在“Stack Trace”视图上打开上下文菜单,然后选择“通过”>“行号区分帧”(参见上面的屏幕截图)。这将允许您查看行号

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

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

谢谢,回答得很好。我正在使用命令行集合,看起来我需要将jdk.javaexceptionstrow选项设置为true。请注意命令行用法,您需要为JFR创建一个新的设置文件,类似于jdk中包含的设置文件(默认和概要文件)。您可以使用JMC执行此操作并导出文件,也可以复制JDK/lib/jfr/profile.jfc并将JDK.javaExceptionRow#enabled更改为true。然后使用
-XX:StartFlightRecording=settings=..
运行您的应用程序。请注意,从Java 11开始,JFR不再是商业功能:)另外,请注意,由于JMC 7,JMC是开源的,作为OpenJDK的一部分。由于JMC8,JMC的源代码可以在GitHub上找到:是的,这是正确的,我的评论是关于JProfiler的,它是一个商业分析器。顺便说一句,因为11.1 JProfiler可以打开JFR快照。