4.2 灰度方案/分析
为保证覆盖业务的高峰期,选择周五、周六、周日分别从两个机房随机选择一台线上实例,线上实例的指标符合预期后,再进行全量升级。
目标组 xx.xxx.60.6
采用方案2,即目标方案
-Xms4096M -Xmx4096M -Xmn1536M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSScavengeBeforeRemark
对照组1 xx.xxx.15.215
采用原始方案
-Xms4096M -Xmx4096M -Xmn1024M -XX:PermSize=512M -XX:MaxPermSize=512M
对照组2 xx.xxx.40.87
采用方案4,即候选目标方案
-Xms4096M -Xmx4096M -Xmn2048M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSScavengeBeforeRemark
灰度3台机器。
我们先分析下Young GC相关指标:
Young GC次数
Young GC累计耗时
Young GC单次耗时
可以看出,与原始方案相比,目标方案的YGC次数减少50%,累积耗时减少47%,吞吐量提升的同时,服务停顿的频率大大降低,而代价是单次Young GC的耗时增长3ms,收益是非常高的。
对照方案2即Young区2G的方案整体表现稍逊与目标方案,再分析Full GC指标。
老年代内存增长情况
Full GC次数
Full GC累计/单次耗时
与原始方案相比,使用目标方案时,老年代增长的速度要缓慢很多,基本在观测周期内Full GC发生的次数从155次减少至27次,减少82%,停顿时间均值从399ms减少至60ms,减少85%,毛刺也非常少。
对照方案2即Young区2G的方案整体表现逊于目标方案。到这里,可以看出,目标方案从各个维度均远优于原始方案,调优目标也基本达成。
但细心的同学会发现,目标方案相对原始方案,"Full GC"(实际上是CMS Background GC)耗时更加平稳,但每个若干次"Full GC"后会有一个耗时很高的毛刺出现,这意味这个用户请求在这个时刻会停顿2-3s,能否进一步优化,给用户一个更加极致的体验呢?