不同的GC算法的实测情况分析

127 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

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策略RPSMaxAvg
SerialGC(单个线程压测)4283.821ms0ms
ParallelGC5294.5223ms0.8ms
G1GC5661.6248ms0.6ms
CMSGC5754.9115ms0.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策略还是需要基于实际项目进行测试,寻找最优。

脱离场景谈性能都是耍流氓