当前位置: 首页 > 知识库问答 >
问题:

如何在Java飞行记录器采样中包含IO绑定的方法?

燕刚毅
2023-03-14

我在启动时通过为测试中的Java程序指定以下CLI选项来启动JFR:

-Xmx24g -XX:+UnlockCommercialFeatures -XX:+FlightRecorder 
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile

测试执行需要90秒才能完成。

在Java Mission Control中打开JFR转储后,JMC中的Call Tree选项卡如下所示:

每秒不到1个样本。这使得详细钻取、热方法和概述选项卡实际上无用。经过初步调查,确定方法采样设置为默认值10ms,而事实证明,这个意外的结果是因为90秒中有98%的时间是在执行各种不同的数据库读取时等待套接字I/O的,所以我只能在另外2%的时间中获取方法示例。

如何在方法时间中包含I/O绑定的示例,以帮助定位花费最多时间等待数据库结果的跟踪?该进程包含多个地方的数据库查询,这些查询反过来又从多个其他地方调用,因此猜测慢速调用路径并不容易。

共有1个答案

戈建白
2023-03-14

JDK8上的最低方法执行采样率是10 ms,这是配置文件设置的结果。假设应用程序上有负载,这对于90秒的记录应该足够了。JDK11中有一个bug导致示例太少,但我可以从屏幕截图中看到您正在运行较早的版本。

如果您想知道应用程序在等待时正在做什么,应该查看Latency选项卡(不是热方法)或Socket Read/Socket Write选项卡。有套接字读取、套接字写入、监视器阻塞、监视器等待等事件,但如果使用异步I/O可能不适用。

编辑

 类似资料:
  • 我们有一个性能很差的应用程序,因此我们使用飞行记录器的方法分析,看看时间都花在哪里了。它基本上起作用了,但一分钟的记录所采集的样本数远低于100个。(使用“分析”预设) 我使用了一个简单的示例应用程序(对随机数求和)进行比较,它产生了大约6000个样本一分钟或记录--这在我看来是正确的。

  • 问题内容: 如何配置Eclipse安装以使用Apache Commons IO中的类? 我想使用以下代码: 但是它给出了错误: IOUtil无法解决 问题答案: 您还可以使用构建工具eclipse插件,例如 m2eclipse 或 IAM (以前称为 Q4e )。 可以按照这些说明安装IAM ,并且它具有出色的依赖性查看器 m2eclipse和IAM之间的差异将在此处,此处和此处进行讨论。 Q4E

  • 我对如何将纹理绑定到GLSL中的插槽有点困惑。以下是我的着色器: 当我设置矩阵时,我需要查询统一位置,然后手动设置该位置的值,执行如下操作: 然而,据我所知,我不需要这样做来初始化我的纹理采样器。在设置时,我似乎只需要这样做: 所以,我的问题是,为什么我不需要对纹理进行与矩阵相同的处理?OpenGL运行时如何“知道”我绑定的纹理应该是我定义的采样器?如果我想拥有多种纹理,我该怎么做呢?

  • java版本java(TM)SE运行时环境(构建1.7.0_79-B15)java HotSpot(TM)64位服务器VM(构建24.79-B02,混合模式) 我使用的ARG

  • 我创建了一个定制的jmeter java采样器,它在循环中向HTTPendpoint发送请求并解析响应。希望多个线程在单个线程组中运行此采样器。 有人建议,我可以在安装线程组中使用beanshell采样器从csv读取,创建hashmap并使用之类的内容将其存储在JMeter属性中。有人能告诉我这是否是一个合理的方法吗?如果是,我如何访问自定义采样器中的特定JMeter属性? 我找到了这个答案:使用

  • 问题内容: 我正在尝试使用JAVA解析JFR转储。我关注了这个博客,http://hirt.se/blog/?p=446。但是现在不推荐使用这些方法。JFR到JAVA是否有任何受支持的解析器?如果不能,您能否指出我是否可以从JFR转储中检索数据? 问题答案: 正如Klara提到的那样,没有官方支持的解析器。希望JDK 9将正式支持JFR解析器。现在,您可以使用Hirt博客中提到的API 。不用担心