本文列出了 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 內存占用很高)。
文檔內容是否對您有幫助?