简体   繁体   中英

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

One of the advertised features of Java Flight Recorder is the ability to report the file created, read or force in the File I/O tab in JMC 8.1

To test this feature, I created a small application that uses Apache commons-io to copy a large file from source to destination.

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);
    }
}

On starting the FlightRecoder with the profile template, and observing the jfr file, I see no events in the File I/O template even though the copy operation took 11 seconds.

JVM used - OpenJDK 11 on Ubuntu.

飞行记录器截图

 java -XX:StartFlightRecording=name=benchmark,filename=benchmark.jfr,settings=profile -jar filecopyer-0.0.1-SNAPSHOT.jar 

I also retried after changing the File IO threshold to 0 ns in the profile.jfc template, and still no events are recorded.

There are simply 0 events captured for jdk.FileWrite, jdk.FileRead and jdk.FileForce.

I however do see events under jdk.NativeMethodSample, which commons-io ends up calling.

Sample application on github: Profiled application

What am I doing wrong?

Looks like the implementation of Files.copy, which Apache Commons seems to use, relies on async I/O to do the copying. See sun.nio.fs.UnixCopyFile::copy(...)

JFR doesn't currently instrument async I/O operations.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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