背景
G1是一款以低延迟为设计目标的垃圾回收器,相比cms,它可以指定最大的gc延迟,并在绝大多数情况下stw的时间会在指定的gc延迟内,不过相比其它个gc垃圾回收器,gc的吞吐较低,本文就来记录以下对于G1来说比较重要的一些参数
G1重要参数
1.G1HeapRegionSize 这个参数表示G1中每个Region的大小,一般来说都是2M的倍数,比如常见的是32M,一般整个堆会分解成1024或者2048个Region,每个区域的大小就是16M/32M,G1中也有新生代和年老代,新生代的大小可能包含XX个Region,年老代的大小也可能包含XX个Region
2.G1NewSizePercent 新生代的大小占比的下限,我们知道G1会根据young gc的时间动态调整新生代的大小,如果ygc的时间比目标gc时间大,那么他就会减少新生代的大小,但是最小不能小于这里设置的值,这个参数隐藏的一个影响时会影响一个mixed gc周期内两次mixed gc的之间间隔,原因在于正常情况下,一个mixed gc周期内的多个mixed gc之间是有比较大的间隔时间的,但是如果这个期间年轻代满了,那么这个mixed gc周期内的多个mixed gc会提前触发,导致多个mixed gc的间隔非常短,比如100ms内就有两个mixed gc,这样其实也就意味着应用线程仅仅运行了几十ms就又进入到另一个stw的mixed gc中了。对于oltp应用来说,有可能一次rpc请求要经历两次stw阶段,这和你一开始预想的设置最大gc目标延迟不一样.你以为一个rpc最多只会延迟你设置的最大目标gc延时时间,但实际不是,这种情况下适当调大这个年轻代大小对增大这个mixed gc的间隔时间有好处
3. G1MixedGcCountTarget 这个参数表示一个Mixed gc周期内最多分成多少次Mixed Gc来执行,这是一个上限值,比如设置成8,一个Mixed Gc周期内最多会分成8次Mixed Gc来完成回收
4. G1OldCSetRegionThresholdPercent: 一个Mixed Gc最多回收多大的年老代 Region空间,注意这个数值如果过大,会导致mixed gc的gc时间过长,例如大于设置的目标gc暂停时间,所以这个不是越大越好,要设置成适当的值,所谓适当是指设置成回收这些old Region所需的gc暂停时间差不多只是设置的目标gc暂停时间即可,这个可能根据实际负载进行调优
备注: G1调优过程中的可视化工具我们可以参考:gc_log_visualizer工具