【JVM】G1收集器调优

1. 使用G1垃圾收集器

修改配置参数,获取到gc日志,使用GCViewer分析吞吐量和响应时间

-XX:+UseG1GC 
Throughput       Min Pause       Max Pause      Avg Pause       GC count   99.16%    
  0.00016s         0.0137s        0.00559s          12  

2. 调整内存大小再获取gc日志分析
 -XX:MetaspaceSize=100M
       -Xms300M -Xmx300M
       Throughput       Min Pause       Max Pause      Avg Pause       GC count   98.89%  
        0.00021s        0.01531s       0.00538s           12
3. 比如设置大停顿时间,获取到gc日志,使用GCViewer分析吞吐量和响应时间
       -XX:MaxGCPauseMillis=200    设置大GC停顿时间指标
       
       Throughput       Min Pause       Max Pause      Avg Pause       GC count   98.96%   
        0.00015s        0.01737s       0.00574s          12  
4. 比如设置大停顿时间,获取到gc日志,使用GCViewer分析吞吐量和响应时间
-XX:InitiatingHeapOccupancyPercent=45
#G1用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内 存的使用比例。值为 0 则表示“一直执行GC循环)'. 默认值为 45 (例如, 全部的 45% 或者使用了45%).
           
Throughput       Min Pause       Max Pause      Avg Pause       GC count   98.11% 
 0.00406s        0.00532s       0.00469s          12      

G1 调优的最佳实战

1. 不要手动设置新生代和老年代的大小,只要设置整个堆的大小;

G1收集器在运行过程中,会自己调整新生代和老年代的大小 其实是通过adapt代的大小来调整对象晋升的速度和年龄,从而达到为收集器设置的暂停时间目标 如果手动设置了大小就意味着放弃了G1的自动调优

2. 不断调优暂停时间目标

一般情况下这个值设置到100ms或者200ms都是可以的(不同情况下会不一样),但如果设置成50ms就不太合理。 暂停时间设置的太短,就会导致出现G1跟不上垃圾产生的速度。终退化成Full GC。所以对这个参数的调优是 一个持续的过程,逐步调整到佳状态。暂停时间只是一个目标,并不能总是得到满足。

3. 使用-XX:ConcGCThreads=n来增加标记线程的数量

IHOP如果阀值设置过高,可能会遇到转移失败的风险,比如对象进行转移时空间不足。如果阀值设置过低,就会 使标记周期运行过于频繁,并且有可能混合收集期回收不到空间。 IHOP值如果设置合理,但是在并发周期时间过长时,可以尝试增加并发线程数,调高ConcGCThreads。

4. MixedGC调优
   -XX:InitiatingHeapOccupancyPercent
   -XX:G1MixedGCLiveThresholdPercent 
   -XX:G1MixedGCCountTarger
   -XX:G1OldCSetRegionThresholdPercent
5. 适当增加堆内存大小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值