为什么G1垃圾收集器的卸载时间会随着时间增加?

时间:2018-10-24 10:25:50

标签: java java-8 garbage-collection solaris g1gc

当在JDK 8u172下在Solaris(SPARC)下运行Glassfish时,使用G1垃圾收集器时,我遇到一种奇怪的行为,Unloading阶段的Remark时间很长,并且越来越时间。

以下是刚启动应用程序服务器后的日志摘录:

  

2018-10-18T10:08:28.362 + 0200:9528.430:[GC备注2018-10-18T10:08:28.362 + 0200:9528.430:[Finalize Marking,0.0012164 secs] 2018-10-18T10:08:28.363 +0200:9528.431:[GC ref-proc,0.1783250秒] 2018-10-18T10:08:28.541 + 0200:9528.609:[正在卸载, 1.4087725秒],1.5954223秒]    [时间:user = 10.79 sys = 0.04,真实= 1.60秒]

几天后:

  

2018-10-22T20:24:52.070 + 0200:392111.556:[GC备注2018-10-22T20:24:52.070 + 0200:392111.556:[Finalize Marking,0.0010811 secs] 2018-10-22T20:24:52.072 +0200:392111.557:[GC ref-proc,0.1432306秒] 2018-10-22T20:24:52.215 + 0200:392111.701:[正在卸载, 5.4160564秒],5.5672543秒]    [Times:user = 41.16 sys = 0.06,real = 5.57 secs]

如您所见,Unloading时间从1.6s增加到5.6s。

以下是Unloading随时间变化的图表:

increasing unloading times over time

如您所见,它随时间线性增长。

以下是相关的命令行标志:

  

-XX:+ AlwaysPreTouch -XX:GCLogFileSize = 10485760 -XX:InitialHeapSize = 8589934592 -XX:MaxHeapSize = 8589934592 -XX:MetaspaceSize = 536870912 -XX:NumberOfGCLogFiles = 5 -XX:+ PrintGC -XX:+ PrintGCDateStamps -XX :+ PrintGCDetails -XX:+ PrintGCTimeStamps -XX:+ UnlockDiagnosticVMOptions -XX:+ UseCompressedClassPointers -XX:+ UseCompressedOops -XX:+ UseG1GC -XX:+ UseGCLogFileRotation -XX:+ UseLargePages -XX:+ UseLargePagesInMetaspace

在读取this blog post之后添加了标志-XX:+UseLargePagesInMetaspace,但不幸的是它不能解决问题。我也查看了this other blog postthis question,但不幸的是,在这种情况下,所有提议的解决方案似乎都不适用。

当Glassfish服务器在其他操作系统/体系结构下运行时,我无法重现此错误。

1 个答案:

答案 0 :(得分:3)

这是JDK中的错误:JDK-8199406 : Performance drop with Java JDK 1.8.0_162-b32

根据错误说明和this discussion thread,此错误:

  • 是JDK 8u161中引入的影响垃圾收集的回归
  • 特定于Solaris:“ 有报告说Solaris SPARC 64上的性能下降了”。 “ 在x86上确实非常快。
  • 增加类卸载时间:“ 这是8u161中引入的一种回归,将客户的类卸载时间从平均0.65秒增加到10秒。
  • 已在JDK 8u181 / 8u182中修复。

向JDK 8u192的迁移修复了该错误,Unloading的时间现在变得更短并且是常量:

  

2018-10-24T11:57:48.479 + 0200:96295.786:[GC备注2018-10-24T11:57:48.480 + 0200:96295.786:[Finalize Marking,0.0012370 secs] 2018-10-24T11:57:48.481 +0200:96295.787:[GC ref-proc,0.0960026秒] 2018-10-24T11:57:48.577 + 0200:96295.883:[正在卸载, 0.2760147秒],0.3796341秒]    [时间:用户= 1.51 sys = 0.02,真实= 0.38秒]