gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:43:54 25 4
gpt4 key购买 nike

在使用 JDK 8u172 的 Solaris (SPARC) 下运行 Glassfish 时,我在使用 G1 垃圾收集器时遇到了一个奇怪的行为,Remark 阶段的Unloading 时间很长,并且随着时间的推移而增加。

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

2018-10-18T10:08:28.362+0200: 9528.430: [GC remark 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 secs] 2018-10-18T10:08:28.541+0200: 9528.609: [Unloading, 1.4087725 secs], 1.5954223 secs] [Times: user=10.79 sys=0.04, real=1.60 secs]

几天后:

2018-10-22T20:24:52.070+0200: 392111.556: [GC remark 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 secs] 2018-10-22T20:24:52.215+0200: 392111.701: [Unloading, 5.4160564 secs], 5.5672543 secs] [Times: user=41.16 sys=0.06, real=5.57 secs]

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

这是卸载时间随时间变化的图表:

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

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

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

最佳答案

这是 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 remark 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 secs] 2018-10-24T11:57:48.577+0200: 96295.883: [Unloading, 0.2760147 secs], 0.3796341 secs] [Times: user=1.51 sys=0.02, real=0.38 secs]

关于java - 为什么 G1 垃圾收集器卸载时间会随着时间的推移而增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52966618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com