本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
sb -u <http://localhost:8088/api/hello> -c 40 -N 30 #压测:40个线程压测30s ,其中SerialGC 特殊 使用的是单线程,40个线程跑不出来结果
ParallelGC
java -jar -Xmx1G -Xms1G gateway-server-0.0.1-SNAPSHOT.jar
RPS: 5294.5 (requests/second) #每秒请求量
Max: 223ms
Min: 0ms
Avg: 0.8ms
50% below 0ms
60% below 0ms
70% below 0ms
80% below 0ms
90% below 1ms
95% below 5ms
98% below 12ms
99% below 18ms
99.9% below 35ms
SerialGC
java -jar -XX:+UseSerialGC -Xmx1G -Xms1G gateway-server-0.0.1-SNAPSHOT.jar
sb -u http://localhost:8088/api/hello -c 1 -N 30
Starting at 2021/8/14 16:02:59
[Press C to stop the test]
133555 (RPS: 3970.7)
---------------Finished!----------------
Finished at 2021/8/14 16:03:33 (took 00:00:33.8050637)
Status 200: 133555
RPS: 4283.8 (requests/second)
Max: 21ms
Min: 0ms
Avg: 0ms
50% below 0ms
60% below 0ms
70% below 0ms
80% below 0ms
90% below 0ms
95% below 0ms
98% below 0ms
99% below 0ms
99.9% below 0ms
G1GC
java -jar -XX:+UseG1GC -Xmx1G -Xms1G gateway-server-0.0.1-SNAPSHOT.jar
RPS: 5661.6 (requests/second)
Max: 248ms
Min: 0ms
Avg: 0.6ms
50% below 0ms
60% below 0ms
70% below 0ms
80% below 0ms
90% below 0ms
95% below 3ms
98% below 8ms
99% below 14ms
99.9% below 41ms
ConcMarkSweepGC
java -jar -XX:+UseConcMarkSweepGC -Xmx1G -Xms1G gateway-server-0.0.1-SNAPSHOT.jar
RPS: 5754.9 (requests/second)
Max: 115ms
Min: 0ms
Avg: 0.6ms
50% below 0ms
60% below 0ms
70% below 0ms
80% below 0ms
90% below 0ms
95% below 4ms
98% below 8ms
99% below 14ms
99.9% below 35ms
同样的Xmx1G的参数情况下压测结果对比:(其中串行GC单个线程压测)
| GC策略 | RPS | Max | Avg |
|---|---|---|---|
| SerialGC(单个线程压测) | 4283.8 | 21ms | 0ms |
| ParallelGC | 5294.5 | 223ms | 0.8ms |
| G1GC | 5661.6 | 248ms | 0.6ms |
| CMSGC | 5754.9 | 115ms | 0.6ms |
YoungGC和FullGG的次数
针对-Xmx配置4G、1G、512M、256M 针对SerialGC、ParallelGC、G1GC、CMSGC四种GC策略进行youngGC和FullGG的次数分析。具体结果如图所示
根据上图综合分析:
-Xmx256M场景下:串行GC策略虽然youngGC的次数最高,但是只发生了7次FullGC ,ParallelGC发生了31次FullGC
-Xmx512M场景下:G1GC策略YoungGC产生了40次,FullGC产生了3次,SerialGC和ParallelGC都发生了10次GC
-Xmx1G场景下:所有的GC策略都只产生了2次GC,其中ParallelGC发生了24Young区GC
-Xmx4G场景下:所有的GC都未产生FullGC,其中G1GC产生了14次FullGC
GC暂停时间
针对-Xmx配置4G、1G、512M、256M 针对SerialGC、ParallelGC、G1GC、CMSGC四种GC策略GC暂停时间进行分析。具体结果如图所示
根据上图综合分析:G1在不同的-Xmx配置下整体的GC暂停时间是最短的(低延迟),这个跟他底层GC算法中的小块region进行垃圾回收有关。
实际项目不同-Xmx不同GC策略下的RPS和平均相应情况
针对-Xmx配置4G、1G、512M 针对SerialGC、ParallelGC、G1GC、CMSGC四种GC策略项目接口(http://localhost:8086/aj/main/web/login)压测情况得出的RPS和平均相应时间。具体结果如图所示
根据上图综合分析:在不同的-Xmx配置下整体的RPS没有断崖式区别,其中ParallelGC整体吞吐量较高,比较意外的是G1GC和CMSGC并没有向预想的一样平均相应时间较低,所以整体具体如何选择GC策略还是需要基于实际项目进行测试,寻找最优。
脱离场景谈性能都是耍流氓