繁体   English   中英

Java 飞行记录器未报告任何文件 I/O 事件

[英]Java Flight Recorder is not reporting any File I/O events

Java 飞行记录器的广告功能之一是能够报告在 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 模板中将文件 IO 阈值更改为 0 ns 后重试,但仍然没有记录任何事件。

jdk.FileWrite、jdk.FileRead 和 jdk.FileForce 只捕获了 0 个事件。

然而,我确实在 jdk.NativeMethodSample 下看到了事件,commons-io 最终调用了它。

github 上的示例应用程序:配置文件应用程序

我究竟做错了什么?

看起来像 Apache Commons 似乎使用的 Files.copy 的实现依赖于异步 I/O 来进行复制。 参见 sun.nio.fs.UnixCopyFile::copy(...)

JFR 当前不检测异步 I/O 操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM