本文列出了 AHAS 应用流控降级在特定 CPU、OS、Java 版本的测试环境下的基准表现。

测试环境

基准的测试环境:

  • CPU:Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz (32 cores)
  • OS:Linux 2.6.32-220.23.2.ali927.el5.x86_64
  • Java 版本:
    java version "1.8.0_77"
    Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
    Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

吞吐量对比

所有吞吐量测试都基于 JMH 编写。

  • 单线程吞吐量:

    JVM 参数:-Xmn256m -Xmx1024m -XX:+UseConcMarkSweepGC

    通过执行 CPU 密集型操作(如小数组排序)模拟不同 QPS 下的情况,来测试单线程模式下接入 AHAS 应用流控降级与不接入 AHAS 应用流控降级的对比。测试逻辑见 SentinelEntryBenchmark。相关结果如下:

    数组长度 Baseline(QPS) With Sentinel(QPS) 性能损耗
    length=25 604589.916 401687.765 33.56%
    length=50 221307.617 192407.832 13.06%
    length=100 97673.228 91535.146 6.28%
    length=200 43742.960 42711.129 2.36%
    length=500 15332.924 15171.024 1.06%
    length=1000 7012.848 6984.036 0.41%
    • 当单机 QPS 为 20 万以上时,AHAS 应用流控降级带来的性能损耗比较大。这种情况业务场景(如缓存读取操作)本身的耗时非常小,而 AHAS 应用流控降级的统计、检查操作会消耗一定的时间。
    • 单机 QPS 在 5 万以下时,AHAS 应用流控降级性带来的能损耗比较小,适用于大多数场景。
  • 多线程吞吐量影响:

    在相同逻辑(对 length=25 的数组进行 shuffle 并排序)的情况下,测试不同线程数下接入 AHAS 应用流控降级的性能表现:

    多线程吞吐量影响

内存占用情况

测试场景:6000 个资源循环执行(即单机的极端场景,目前最多支持 6000 个 Entry)。

  • 单线程循环执行:内存占用约 185 MB。
  • 8 线程循环执行:内存占用约 1 GB(若系统持续高并发持续很,将导致底层的 LongAdder 内存占用很高)。