我在加载的JBoss EAP 6.1应用服务器上运行Java Flight Recorder 2分钟。我启用了异常计数(Java Application => Java Exception => Enabled = true),并且我对报告的异常数量感到惊讶。
当我查看Events =>具有事件类型的直方图视图" Java应用程序/ Java异常"并且通过"事件线程",10个线程各有超过2000个例外。其中3个有超过3000个例外。
这是Throwable或Error的报告创建总数:
Stack Trace Sample Count
java.lang.Throwable.<init>() 128 059
java.lang.Throwable.<init>(String) 116 107
java.lang.Throwable.<init>(Throwable) 39 207
java.lang.Error.<init>() 7
java.lang.Throwable.<init>(String, Throwable) 2
所以我想知道所有这些异常是否发生在我记录的2分钟时间内,或者是自JVM启动以来是否计算过?
答案 0 :(得分:0)
&#34;样本计数&#34; “直方图”选项卡中的列会聚合事件数相对于字段值,在您的情况下,我相信堆栈跟踪的顶部框架。所以数字128 059意味着有很多事件发出的顶部框架是&#34; java.lang.Throwable.<init>()
&#34;录音期间。
这可能不是您要查找的信息。
我建议使用录制模板启用例外/错误,并查看例外标签,而不是编辑单个事件的设置并使用直方图标签。
答案 1 :(得分:0)
TL; DR:Java异常事件仅计算录制期间发生的事件。异常统计信息事件在JVM生存期(或其他一些“JVM全局”时间)期间计算异常。
有两个不同的数据点,Java异常和Java错误事件,以及Statistics / Throwables事件。 如果只查看Java异常/错误,则录制中的事件是那段时间内发生的事件。 Statistics / Throwables事件是定期进行的,可能是从JVM的开始,也可能是从JFR引擎的开始,或者是从运行的JVM中发生的第一个JFR记录的开始。将这些值相互比较是非常有趣的。此事件显示在“代码/例外”选项卡的顶部,位于两个文本字段中。
另请注意,异常/错误事件发生在构造函数中,而不是在实际抛出时
如果你的程序创建了很多Java Error事件,那么对这些事件的双重记录存在一些问题,因此数字可能不正确(这是我们在下一个JMC版本中已经补偿的,但在JMC 5.5中没有补偿) 其他Throwable子类将显示为Exception事件。