java g1 gc_Java垃圾收集器G1GC需要很长时间进行“对象复制”(撤离暂停)

本文探讨了一种情况,即在Java应用中,G1垃圾收集器在进行'对象复制'(撤离暂停)时出现了长时间停顿,尽管内存充足。通过GC日志分析,发现在某些情况下,G1 GC的停顿时间远超其默认最大200毫秒的目标。此外,还提到了'Metadata GC Threshold'暂停,这可能是由于元空间不足导致的。建议调整元空间大小以优化性能。
摘要由CSDN通过智能技术生成

我不是Java的新手,但是我对垃圾收集只了解一点点。现在,我想通过一些实践经验来改变这种状况。我的目标是在0.3秒以下的延迟,或者在极端情况下0.5也可以。

我有一个带有-Xmx50gb(-Xms50gb)的应用程序,并设置了以下其他GC选项:

-XX:+UseG1GC -Xloggc:somewhere.gc.log -XX:+PrintGCDateStamps

但是现在由于垃圾回收,尽管偶尔有足够的可用内存,但我偶尔会在5秒内停顿很长时间。我发现的原因之一:

[GC pause (G1 Evacuation Pause) (young) 42G->40G(48G), 5.9409662 secs]

为什么GCG1仍为此做一个“停止世界”?(或者至少我看到它恰好在此时停止了我的应用程序)以及为什么由于不需要的可用内存(如果可用RAM超过12%)而没有必要进行此类负面清理。我还认为默认值-XX:MaxGCPauseMillis是200毫秒,为什么这个值违反了29甚至50倍(请参阅下文)?

延迟的另一个原因是:

[GC pause (Metadata GC Threshold) (young) (initial-mark) 40G->39G(48G), 10.4667233 secs]

这可能会通过此答案解决,例如仅增加元数据空间-XX:MetaspaceSize=100M

顺便说一句:使用JSE 1.8.0_91-b14

更新: 此类事件的详细GC日志

2016-08-12T09:20:31.589+0200: 1178.312: [GC pause (G1 Evacuation Pause) (young) 1178.312: [G1Er

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值