jvm Java飞行记录器-异步I/O支持

yr9zkbsy  于 2022-11-07  发布在  Java
关注(0)|答案(1)|浏览(222)

JFR是否支持异步I/O?
我正在使用Java飞行记录器(在HotSpot 1.8.0_144上)+使命Control来评测应用程序。
在使命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)

未报告异步文件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 */)

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

个问题

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

mqkwyuun1#

是否不支持文件异步IO?
没有文件异步I/O事件。
异步套接字IO(我还没有测试过)呢?
也不是插座。
如果答案是否定的,使用JFR的社区认为这有多糟糕?感觉这是一个很大的缺点,但我缺乏上下文来理解这在实践中是否很重要。
它是known issue已经很多年了,但是实现起来很棘手,JFR确实支持Virtual Threads,这有望减少直接使用异步API的需求,它仍然是一个预览功能(2022年4月)
请观看FOSDEM的演示文稿,33:00分钟,. https://archive.fosdem.org/2020/schedule/event/state_openjdk/

相关问题