GC调优——XX:TargetSurvivorRatio的使用

使用jmeter对服务进行压测,一个需要吞吐量的应用,2000个线程,JVM参数如下:

-Xms4096m 
-Xmx4096m 
-Xss256K 
-XX:MetaspaceSize=128M 
-XX:MaxMetaspaceSize=256M 
-Xmn3g 
-XX:+UseAdaptiveSizePolicy 
-XX:SurvivorRatio=10 
-XX:TargetSurvivorRatio=80 
-XX:+UseParallelGC 
-XX:ParallelGCThreads=16 
-XX:+UseParallelOldGC 
-XX:MaxGCPauseMillis=100 
-XX:+PrintGCDetails 
-XX:+PrintTenuringDistribution 
-Xloggc:gclog.log

参数释义:新生代使用PS(Parallel Scavenge)收集器,老年代使用PO(Serial Old)收集器,Survivor区使用自适应策略,老年代大小为1024M,新生代大小为3072M,运行之后部分gc日志如下:

759.070: [GC (Allocation Failure) 
Desired survivor size 54001664 bytes, new threshold 1 (max 15)
[PSYoungGen: 3077120K->38288K(3091456K)] 3364258K->329282K(4140032K), 0.0254347 secs] [Times: user=0.30 sys=0.01, real=0.02 secs] 
760.813: [GC (Allocation Failure) 
Desired survivor size 52953088 bytes, new threshold 1 (max 15)
[PSYoungGen: 3076496K->41152K(3094016K)] 3367490K->335530K(4142592K), 0.0259776 secs] [Times: user=0.31 sys=0.00, real=0.03 secs] 
762.741: [GC (Allocation Failure) 
Desired survivor size 51904512 bytes, new threshold 1 (max 15)
[PSYoungGen: 3082432K->39072K(3092992K)] 3376810K->336986K(4141568K), 0.0253653 secs] [Times: user=0.30 sys=0.00, real=0.02 secs] 
764.476: [GC (Allocation Failure) 
Desired survivor size 51380224 bytes, new threshold 1 (max 15)
[PSYoungGen: 3080352K->41472K(3095552K)] 3378266K->343266K(4144128K), 0.0259734 secs] [Times: user=0.31 sys=0.00, real=0.03 secs] 
766.346: [GC (Allocation Failure) 
Desired survivor size 50855936 bytes, new threshold 1 (max 15)
[PSYoungGen: 3086336K->39616K(3095040K)] 3388130K->344530K(4143616K), 0.0265471 secs] [Times: user=0.30 sys=0.00, real=0.03 secs]

来说一说存在的问题:对象进入Survivor区之后,由于使用的是自适应策略,导致年龄为1的时候,也就是Minor GC一次的时候就被移动到老年代了,导致老年代内存增长太快,结果导致在2000线程的压力下,10分钟就发生了一次FGC:

734.611: [Full GC (Ergonomics) [PSYoungGen: 39264K->0K(3102208K)] [ParOldGen: 1044614K->203586K(1048576K)] 1083878K->203586K(4150784K), [Metaspace: 71093K->71084K(1114112K)], 0.4044200 secs] [Times: user=1.56 sys=0.02, real=0.41 secs] 
736.801: [GC (Allocation Failure) 

现在修改参数如下:

-Xms4096m 
-Xmx4096m 
-Xss256K 
-XX:MetaspaceSize=128M 
-XX:MaxMetaspaceSize=256M 
-Xmn3g 
-XX:-UseAdaptiveSizePolicy 
-XX:SurvivorRatio=10 
-XX:TargetSurvivorRatio=80 
-XX:+UseParallelGC 
-XX:ParallelGCThreads=16 
-XX:+UseParallelOldGC 
-XX:MaxGCPauseMillis=100 
-XX:+PrintGCDetails 
-XX:+PrintTenuringDistribution 
-Xloggc:gclog.log

重要参数释义:

-XX:-UseAdaptiveSizePolicy 禁用Survivor区自适应策略
-XX:TargetSurvivorRatio=80 Survivor区对象使用率80%,默认是50%

运行后观察GC日志:老年代内存增量很慢很慢

423.288: [GC (Allocation Failure) [PSYoungGen: 2663744K->37488K(2883584K)] 2805561K->179425K(3932160K), 0.0249582 secs] [Times: user=0.27 sys=0.00, real=0.02 secs] 
424.884: [GC (Allocation Failure) [PSYoungGen: 2658928K->39872K(2883584K)] 2800865K->181817K(3932160K), 0.0250108 secs] [Times: user=0.27 sys=0.01, real=0.03 secs] 
426.367: [GC (Allocation Failure) [PSYoungGen: 2661312K->42848K(2883584K)] 2803257K->184817K(3932160K), 0.0259483 secs] [Times: user=0.30 sys=0.00, real=0.02 secs] 
427.911: [GC (Allocation Failure) [PSYoungGen: 2664288K->42464K(2883584K)] 2806257K->184441K(3932160K), 0.0260695 secs] [Times: user=0.29 sys=0.01, real=0.03 secs] 
429.493: [GC (Allocation Failure) [PSYoungGen: 2663904K->42960K(2883584K)] 2805881K->184961K(3932160K), 0.0264706 secs] [Times: user=0.29 sys=0.01, real=0.03 secs] 
431.164: [GC (Allocation Failure) [PSYoungGen: 2664400K->44816K(2883584K)] 2806401K->186985K(3932160K), 0.0263883 secs] [Times: user=0.29 sys=0.00, real=0.03 secs] 
432.723: [GC (Allocation Failure) [PSYoungGen: 2666256K->42016K(2883584K)] 2808425K->184201K(3932160K), 0.0269009 secs] [Times: user=0.29 sys=0.00, real=0.03 secs] 
434.244: [GC (Allocation Failure) [PSYoungGen: 2663456K->42896K(2883584K)] 2805641K->185217K(3932160K), 0.0258802 secs] [Times: user=0.29 sys=0.01, real=0.03 secs] 
435.859: [GC (Allocation Failure) [PSYoungGen: 2664336K->40608K(2883584K)] 2806657K->182937K(3932160K), 0.0253089 secs] [Times: user=0.28 sys=0.01, real=0.02 secs] 
437.329: [GC (Allocation Failure) [PSYoungGen: 2662048K->42304K(2883584K)] 2804377K->184665K(3932160K), 0.0283344 secs] [Times: user=0.29 sys=0.00, real=0.02 secs]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhiYuanYe

您的鼓励将是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值