从 JMC/JCMD 捕获飞行记录与 WLDF 图像捕获

Capture a flight recording from JMC/JCMD vs WLDF image capture

我需要 Java 飞行记录来诊断生产 Weblogic 服务器上的性能问题。我还想获取 Weblogic 事件。从 Java 任务控制(或在我的情况下是 JCMD)开始飞行记录与启动 WLDF 诊断图像捕获之间有什么区别吗?我知道 WLDF 除了 .jfr 之外还包含压缩文件,但现在我只对包含 HotspotJVM 和 Weblogic 事件的飞行记录 (.jfr) 感兴趣。

我问的原因是因为我注意到 WLDF 文档中的一些内容称为配置 WLDF 诊断卷(关闭、低、中、高),您可以在其中设置要记录的 Weblogic 事件类型。在 weblogic java 实例上从 JCMD 开始飞行记录是否会包括预配置诊断卷中的 Weblogic 事件?或者您需要从 Weblogic 管理控制台启动它吗?

记录到飞行记录器中的所有内容都记录到相同的缓冲区中。参见 http://hirt.se/blog/?p=370。也就是说,WLDF 检测设置将限制实际记录的内容。因此,有多种不同的方法可以实现您想要的。要做的第一件事是确保您已启用 WLDF 中的诊断卷以记录您希望 WLDF 记录到飞行记录器中的任何内容。例如 "high"。

接下来您可以:

  • 使用命令行标志开始连续记录,并配置一个模板来记录您感兴趣的内容。(例如,分析模板减去了完整的线程堆栈转储事件。)

  • ...或者使用jcmd开始记录,再次参考模板,指定除了WLDF事件之外,你还想记录什么。

  • ...或使用 JMC 做几乎相同的事情 - 使用您感兴趣的模板设置开始录制。

第一种选择的优点是您感兴趣的事件将始终可用,即使您转储任意时间段也是如此。在其他两种选择中,它们仅在您 运行 您的(大概)限时录音时可用。其他替代方案的优势在于,当您的录音 运行 时,您只需支付额外事件的(通常很小的)额外开销。

WLS 中没有机制可以使用 jcmd 或 JMC 连续轮询以查看是否已开始记录,如果是,则启用 WLDF 事件。

您必须在 WLDF GUI [1] 中单独启用它们。当您这样做时,您还将获得与创建默认记录时所获得的大致对应的 JVM 事件。如果您想要更详细的信息(个人资料),则需要开始两次单独的重新编码。

[1] 很高兴知道 WLDF 事件是使用字节码检测添加的,因此在启用诊断功能之前事件甚至不在代码中。