微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在JDK 11中阅读JFR

如何解决如何在JDK 11中阅读JFR

我使用Java Flight Recorder生成一个jfr文件,我想将其转换为火焰图兼容格式(https://github.com/brendangregg/FlameGraph)。是否有任何java类可以读取jfr文件。在Java 7中,我们拥有

import com.jrockit.mc.common.IMCFrame;
import com.jrockit.mc.common.IMcmethod;
import com.jrockit.mc.flightrecorder.FlightRecording;
import com.jrockit.mc.flightrecorder.FlightRecordingLoader;
import com.jrockit.mc.flightrecorder.internal.model.FlrstackTrace;
import com.jrockit.mc.flightrecorder.spi.IEvent;
import com.jrockit.mc.flightrecorder.spi.IEventType;
import com.jrockit.mc.flightrecorder.spi.IField;
import com.jrockit.mc.flightrecorder.spi.IView;

但是我想知道JDK 11中是否有其他选择,我没有在/ lib /目录中看到Java Mission Control

解决方法

如果只想生成火焰图,则可以对JMC中的任何事件集执行此操作。只需从以下位置下载最新的JDK Mission Control 8.0 EA构建: https://adoptopenjdk.net/jmc

然后转到窗口->显示视图->任务控制/火焰视图。 (目前尚无法在Windows上使用。)

现在,代表事件选择的任何事物都将在该视图中显示为火焰图。

您可以获取代码以从https://github.com/openjdk/jmc中生成火焰图(例如,检出https://github.com/openjdk/jmc/blob/master/application/org.openjdk.jmc.flightrecorder.flameview/src/main/java/org/openjdk/jmc/flightrecorder/flameview/tree/TraceTreeUtils.java),尽管如果等待一两个星期,{{3} }已签入。

,

JDK 11带有一个API。

以下代码片段显示了最热门方法的直方图:

public static void main(String[] args) throws IOException {
     if (args.length != 1) {
         System.err.println("Must specify a recording file.");
         return;
     }

     RecordingFile.readAllEvents(Path.of(args[0])).stream()
         .filter(e -> e.getEventType().getName().equals("jdk.ExecutionSample"))
         .map(e -> e.getStackTrace())
         .filter(s -> s != null)
         .map(s -> s.getFrames().get(0))
         .filter(f -> f.isJavaFrame())
         .map(f -> f.getMethod())
         .collect(
             Collectors.groupingBy(m -> m.getType().getName() + "." + m.getName() + " " + m.getDescriptor(),Collectors.counting()))
         .entrySet()
         .stream()
         .sorted((a,b) -> b.getValue().compareTo(a.getValue()))
         .forEach(e -> System.out.printf("%8d %s\n",e.getValue(),e.getKey()));
 }

API参考:

https://docs.oracle.com/en/java/javase/15/docs/api/jdk.jfr/jdk/jfr/consumer/package-summary.html

“ Flight Recorder API程序员指南”:

https://docs.oracle.com/en/java/javase/14/jfapi/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。