如何以编程方式解析 Oracle JDK 7 或 JDK8 中的 JFR 文件?
how to parse a JFR file in Oracle JDK7 or JDK8 programatically?
Oracle JDK14 和 JDK15 的 API 发布于 https://docs.oracle.com/en/java/javase/14/jfapi/parsing-recording-file.html
但我找不到 Oracle JDK8 的类似文档。
我想知道是否有人能够打印出使用 JDK8 收集的 JFR 文件的事件列表,就像 JDK14 和 JDK15 的文档中显示的示例一样。那么\jre\lib\jfr.jar 文件的作用是什么?
解析示例中的 JFR 相关 类 自 Java 9 以来就存在,因此不可能在 Java 8 或更早版本中执行该示例(至少没有很多技巧).
jfr.jar
包含 Java 飞行记录器 runtime,因此它用于收集数据,而不是解析数据。
Oracle JDK 8 中的解析器 API 不受支持且未记录,但如果您只想将记录打印到标准输出,您可以尝试:
$ java oracle.jrockit.jfr.parser.Parser [-xml] <file>
如果您想在旧版本上做任何更复杂的事情,我会研究 JMC 解析器,它支持 Oracle JDK 8 和 JDK 9 中添加的新文件格式。
JDK8 的代码由 Marcus 在外部站点发布:
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import oracle.jrockit.jfr.parser.*;
public class JDKParserTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) throws IOException {
File recordingFile = new File("C:\demo\wldf.jfr");
Parser parser = new Parser(recordingFile);
int count = 0;
Iterator<ChunkParser> chunkIter = parser.iterator();
while (chunkIter.hasNext()) {
ChunkParser chunkParser = chunkIter.next();
for (FLREvent event : chunkParser) {
count++;
//System.out.println(event.toString());
}
}
parser.close();
System.out.println("Found " + count + " events");
}
}
这正是我构建自定义报告所需要的。
参考:http://hirt.se/blog/?p=446
Oracle JDK14 和 JDK15 的 API 发布于 https://docs.oracle.com/en/java/javase/14/jfapi/parsing-recording-file.html 但我找不到 Oracle JDK8 的类似文档。
我想知道是否有人能够打印出使用 JDK8 收集的 JFR 文件的事件列表,就像 JDK14 和 JDK15 的文档中显示的示例一样。那么
解析示例中的 JFR 相关 类 自 Java 9 以来就存在,因此不可能在 Java 8 或更早版本中执行该示例(至少没有很多技巧).
jfr.jar
包含 Java 飞行记录器 runtime,因此它用于收集数据,而不是解析数据。
Oracle JDK 8 中的解析器 API 不受支持且未记录,但如果您只想将记录打印到标准输出,您可以尝试:
$ java oracle.jrockit.jfr.parser.Parser [-xml] <file>
如果您想在旧版本上做任何更复杂的事情,我会研究 JMC 解析器,它支持 Oracle JDK 8 和 JDK 9 中添加的新文件格式。
JDK8 的代码由 Marcus 在外部站点发布:
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import oracle.jrockit.jfr.parser.*;
public class JDKParserTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) throws IOException {
File recordingFile = new File("C:\demo\wldf.jfr");
Parser parser = new Parser(recordingFile);
int count = 0;
Iterator<ChunkParser> chunkIter = parser.iterator();
while (chunkIter.hasNext()) {
ChunkParser chunkParser = chunkIter.next();
for (FLREvent event : chunkParser) {
count++;
//System.out.println(event.toString());
}
}
parser.close();
System.out.println("Found " + count + " events");
}
}
这正是我构建自定义报告所需要的。 参考:http://hirt.se/blog/?p=446