【发布时间】:2021-08-23 17:40:10
【问题描述】:
Java Flight Recorder 的一项宣传功能是能够在 JMC 8.1 的文件 I/O 选项卡中报告创建、读取或强制执行的文件
为了测试这个功能,我创建了一个小应用程序,它使用 Apache commons-io 将一个大文件从源复制到目标。
public static void fileCopy(String srcPath ,String destPath) throws IOException {
File inpFile = new File(srcPath);
if(inpFile.exists() && inpFile.isFile()) {
File destFile = new File(destPath);
FileUtils.copyFile(inpFile, destFile);
}
}
在使用配置文件模板启动 FlightRecoder 并观察 jfr 文件时,我在文件 I/O 模板中看不到任何事件,即使复制操作花费了 11 秒。
使用的 JVM - Ubuntu 上的 OpenJDK 11。
java -XX:StartFlightRecording=name=benchmark,filename=benchmark.jfr,settings=profile -jar filecopyer-0.0.1-SNAPSHOT.jar
我在profile.jfc模板中将File IO阈值改成0ns后也重试了,还是没有记录任何事件。
只为 jdk.FileWrite 、 jdk.FileRead 和 jdk.FileForce 捕获了 0 个事件。
不过,我确实看到 jdk.NativeMethodSample 下的事件,commons-io 最终会调用它。
github 上的示例应用程序: Profiled application
我做错了什么?
【问题讨论】: