指标 | 参数 |
---|
机器 | 8C16G |
操作系统 | Linux |
WEB服务器 | Tomcat |
首先我们根据Java Performance推荐公式配置最优GC参数
Xmx和Xms设置为老年代存活对象的3-4倍,即Full GC之后老年代内存占用的3-4倍
永久代(元空间)设置为老年代存活对象的1.2-1.5倍
Xmn设置为老年代存活对象的1-1.5倍
老年代内存大小设置为老年代存活对象的2-3倍
经过测试发现Full GC后老年代内存占用为136m左右,所以设置Xms和Xmx为512m,Xmn设置为192m
吞吐量优先
GC参数设置
#初始堆大小/最大堆大小/新生代大小/元空间大小/元空间最大允许大小/线程栈大小
-Xms512m -Xmx512m -Xmn192m -XX:MetaspaceSize=192m -XX:MaxMetaspaceSize=320m -Xss512k
#垃圾回收器(ps和po)
-XX:+UseParallelGC -XX:+UseParallelOldGC
#统计GC信息
-XX:PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:${BASE_DIR}/logs/gc-ps-po.log
查看JVM参数信息:jmap -heap pid
压测接口
线程组配置1600*5000
花费共29min13s
吞吐量
平均吞吐量为4564.6
RT
平均响应时间为348ms
TPS
GC统计信息
grafana+prometheus监控图
GC Easy进行gc日志分析
堆内存统计信息
结果分析
GC总耗时:63.326s
Young GC总耗时:61.246s
Full GC总耗时:2.080s
最大GC停顿时间:210ms
响应时间优先
GC参数设置
#初始堆大小/最大堆大小/新生代大小/元空间大小/元空间最大允许大小/线程栈大小
-Xms512m -Xmx512m -Xmn192m -XX:MetaspaceSize=192m -XX:MaxMetaspaceSize=320m -Xss512k
#垃圾回收器(ParNew和CMS)
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
#统计GC信息
-XX:PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:${BASE_DIR}/logs/gc-parnew-cms.log
查看JVM参数信息:jmap -heap pid
压测接口
线程组配置1600*5000
花费共30min22s
吞吐量
平均吞吐量为4392.0
RT
平均响应时间为361ms
TPS
GC统计信息
grafana+prometheus监控图
GC Easy进行GC日志分析
堆内存统计信息
结果分析
GC总耗时:55.627s
Young GC总耗时:55.627s
Full GC总耗时:0s
最大GC停顿时间:90ms
全功能垃圾收集器
GC参数设置
#初始堆大小/最大堆大小/元空间大小/线程栈大小
-Xms2048m -Xmx2048m -XX:MetaspaceSize=128m -Xss512k
#垃圾回收器(G1)/期望最大停顿时间
-XX:+UseG1GC -XX:MaxGCPauseMillis=80
#统计GC信息
-XX:PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:${BASE_DIR}/logs/gc-g1.log
查看JVM参数信息:jmap -heap pid
压测接口
线程组配置1600*5000
花费共27min37s
吞吐量
平均吞吐量为4828.7
RT
平均响应时间为329ms
TPS
GC统计信息
grafana+prometheus监控图
GC Easy进行GC日志分析
堆内存统计信息
结果分析
GC总耗时:14.630s
最大GC停顿时间:80ms
结论
指标 | 吞吐量 | TPS/s | 响应时间(ms) | GC总耗时(s) | 最大GC停顿时间(ms) |
---|
吞吐量优先 | 98.134% | 4564.6 | 348 | 63.326 | 210 |
响应时间优先 | 97.112% | 4392.0 | 361 | 55.627 | 90 |
全功能 | 99.138% | 4828.7 | 329 | 14.630 | 80 |
在低延时接口下,三者对比性能其实没有很大差别,但相对来说,使用G1垃圾回收器性能明显会更优于其他两种策略,但是G1适用于堆内存较大的场景,我们还是需要具体场景具体分析