Java Flight Recorder - 异步 I/O 支持

Car*_*ira 3 java jvm jmc jfr

JFR 支持异步 I/O 吗?

我正在使用 Java Flight Recorder(在 HotSpot 1.8.0_144 上)+ Mission Control 来分析应用程序。

File IO任务控制的选项卡上,我看到的“活动”比我预期的要少几个数量级,而且我知道这些活动实际上正在发生。
我实际看到的 IO“活动”似乎对应于同步文件 IO,但我不确定这是否只是巧合,或者是我的 JFR 配置错误。

我确实在一个较小的示例上尝试过此操作(见下文),感觉好像没有报告文件异步事件。

报告同步文件 IO 事件

val inputStream = new FileInputStream("/home/cmhteixeira/Desktop/output.txt")
val outputStream = new FileOutputStream("/home/cmhteixeira/Desktop/output-copy.txt")

inputStream.transferTo(outputStream)
Run Code Online (Sandbox Code Playgroud)

不报告异步文件 IO 事件

RxIo(下面使用)是一个声称使用文件异步 IO 的库。

import org.javaync.io.AsyncFiles
import java.nio.file.Paths

val inputStream = Paths.get("/home/cmhteixeira/Desktop/output.txt")
val outputStream = Paths.get("/home/cmhteixeira/Desktop/output-copy.txt")

AsyncFiles
  .readAllBytes(inputStream)
  .thenCompose(bytes => AsyncFiles.writeBytes(outputStream, bytes))
  .thenAcceptAsync(index => println("done")/* invoked on completion */)
Run Code Online (Sandbox Code Playgroud)

在上述两种情况下,当通过 Java Mission Control 吃午餐时File IO Threshold被设置为0 ns

问题

  • 不支持文件异步IO吗?
  • 异步套接字 IO 怎么样(我没有测试过)?
  • 如果答案是否定的,那么使用 JFR 的社区认为这有多糟糕?
    • 这感觉像是一个很大的缺点,但我缺乏背景来理解这在实践中是否很重要。

Kir*_*lin 5

不支持文件异步IO吗?

没有文件异步 I/O 事件。

异步套接字 IO 怎么样(我没有测试过)?

也不是插座。

如果答案是否定的,那么使用 JFR 的社区认为这有多糟糕?这感觉像是一个很大的缺点,但我缺乏背景来理解这在实践中是否很重要。

多年来,这是一个众所周知的问题,但实施起来却很棘手。JFR 确实支持虚拟线程,这有望减少直接使用异步 API 的需要。它仍然是预览功能(2022 年 4 月)

请参阅 FOSDEM 的演示文稿,33:00 分钟。 https://archive.fosdem.org/2020/schedule/event/state_openjdk/