我需要 Java 飞行记录来诊断生产 Weblogic 服务器上的性能问题。 我还想获取Weblogic事件。 从Java任务控制中心(或在我的例子中是JCMD)开始飞行记录与启动WLDF诊断图像捕获之间有什么区别吗? 我知道WLDF除了.jfr之外还包含压缩文件,但现在我只对带有HotspotJVM和Weblogic事件的飞行记录(.jfr)感兴趣。
我问的原因是因为我注意到 WLDF 文档中有一个名为配置 WLDF 诊断卷(关闭、低、中、高)的内容,您可以在其中设置要记录的 Weblogic 事件类型。 在 weblogic java 实例上从 JCMD 启动飞行记录是否会包括预配置诊断卷上的 Weblogic 事件? 还是需要从 Weblogic 管理控制台启动它?
WLS 中没有使用 jcmd 或 JMC 持续轮询以查看记录是否已启动的机制,如果是,则启用 WLDF 事件。
您必须在 WLDF GUI [1] 中单独启用它们。当您这样做时,您还将获得与创建默认记录时大致对应的 JVM 事件。如果需要更详细的信息(配置文件),则需要启动两个单独的重新编码。
[1] 最好知道 WLDF 事件是使用字节码检测添加的,因此在您启用诊断功能之前,这些事件甚至不会在代码中。
记录到飞行记录器中的所有内容都记录到相同的缓冲区中。请参阅 http://hirt.se/blog/?p=370。也就是说,WLDF 检测设置将限制实际记录的内容。因此,有各种不同的方法可以实现您想要的。首先要做的是确保您已启用 WLDF 中的诊断卷,以记录您希望 WLDF 记录到飞行记录器中的任何内容。例如"高"。
接下来,您可以:
-
使用命令行标志开始连续记录,并使用配置为记录您感兴趣的模板。(例如,分析模板减去整个线程堆栈转储事件。
-
。或者使用 jcmd 开始录制,再次引用指定除 WLDF 事件之外要记录的内容的模板。
-
。或者使用 JMC 做几乎相同的事情 - 使用您感兴趣的模板设置开始录制。
第一种选择的优点是,即使您转储任意时间段,您感兴趣的事件也将始终可用。在其他两种选择中,它们仅在您运行(大概)限时录制时可用。其他替代方案的优点是,您只需为录制运行时附加事件的额外开销(通常很小)付费。