1

我知道将 JFR 解析为 Java 可以由不受支持的解析器(如 JMC 解析器)使用来自this的 jrockit 来完成。我还想在飞行记录过程中会捕捉到很多事件。

如果我想从各种事件中检索数据值,例如事件选项卡下的堆栈跟踪、代码选项卡下的热方法、代码选项卡下的调用树等。我该如何过滤?示例图片

例如,我能够使用 jfr-flame-graph 中提到的以下代码过滤调用树。

final String EVENT_TYPE = "Method Profiling Sample";
IView view = recording.createView();
for(IEvent event : view){
if(EVENT_TYPE.equals(event.getEventType().getName())){
  FLRStackTrace flrStackTrace = (FLRStackTrace) event.getValue("(stackTrace)");

这里,事件类型 - 方法分析示例;标识符 - (堆栈跟踪);

因此,如果我想检索堆栈跟踪/热方法/等,我需要捕获哪些事件/标识符?有这方面的文件吗?

4

2 回答 2

1

没有任何文档。如果你想提取堆栈跟踪,jfr-flame-graph 是一个很好的例子。事件/堆栈跟踪和代码/热方法之间的区别只是热方法选项卡仅使用方法分析示例事件,事件选项卡更通用,将显示您在事件类型视图中选择的事件类型。代码/调用树与热方法相同,但“颠倒”。

要查看可用的其他事件,您可以使用 JMC UI。那里有一个称为设计器视图的功能(单击窗口/显示视图/设计器)。如果您打开了一个记录,您可以使用红色停止按钮进入您感兴趣的选项卡的设计模式,然后右键单击感兴趣的组件以查看它使用的事件类型和属性。

于 2016-05-20T07:49:24.937 回答
0

JDK 9 具有受支持的解析器 API。

Path p = Paths.get("recording.jfr");
for (RecordedEvent event: RecordingFile.readAllEvents(p)) {
  System.out.println(event);
}

有关更完整的示例,请参阅 Javadoc http://docs.oracle.com/javase/9​​/docs/api/jdk/jfr/consumer/package-summary.html

于 2017-09-30T19:54:44.347 回答