小编Dhi*_*osh的帖子

G1 GC - 大型后台 I/O 导致 JVM 无响应 - 暂停 8 秒

我们有一个几乎需要实时响应的 Java 应用程序。但我们也看到了长达 8 秒的停顿。

特殊运行条件:

  1. 在某些时间间隔,应用程序会将大小高达 1.5G 的巨大数据快照序列化到磁盘 (SSD) 中。
  2. m/c 中的其他一些共存进程偶尔会发生一些繁重的后台 I/O。

我们正在观察的是,这个大型序列化写入发生的间隔期间,如果 GC 偶然启动,它会导致 6 到 8 秒的巨大暂停,JVM 处于完全无响应/冻结状态。

从 JFR 记录可以看出,

  1. 除了写入磁盘的线程之外,所有线程都处于停放/等待/睡眠状态。
  2. G1 GC 大约需要 200 毫秒才能完成 GC。

来自 GC 日志:2018-09-05T18:23:40.277+0000: 39892.345:应用程序线程停止的总时间:8.3785112秒,停止线程花费:8.3765855 秒

Java 版本:java 版本“1.8.0_181”Java(TM) SE 运行时环境(构建 1.8.0_181-b25)Java HotSpot(TM) 64 位服务器 VM(构建 25.181-b25,混合模式)

问题:

  1. 当 GC 和后台 I/O 同时发生时,为什么非 GC JVM 会暂停 8 秒?
  2. 如何克服这个大停顿?

JFR 文件:https : //www.filehosting.org/file/details/756217/Run.jfr

java garbage-collection g1gc pause

5
推荐指数
1
解决办法
732
查看次数

标签 统计

g1gc ×1

garbage-collection ×1

java ×1

pause ×1