Jmeter系列(9)- 併發執行緒組Concurrency Thread Group詳解
阿新 • • 發佈:2020-12-16
一、Concurrency Thread Group的介紹
- Concurrency Thread Group提供了用於配置多個執行緒計劃的簡化方法
- 該執行緒組目的是為了保持併發水平,意味著如果併發執行緒不夠,則在執行執行緒中啟動額外的執行緒
- 和Standard Thread Group不同,它不會預先建立所有執行緒,因此不會使用額外的記憶體
- 對於上篇講到的Stepping Thread Group來說,Concurrency Thread Group是個更好的選擇,因為它允許執行緒優雅地完成其工作
- Concurrency Thread Group提供了更好的使用者行為模擬,因為它使您可以更輕鬆地控制測試的時間,並建立替換執行緒以防執行緒在過程中完成
二、Concurrency Thread Group引數講解
Target Concurrency
:目標併發(執行緒數)Ramp Up Time
:啟動時間;若設定 1 min,則目標執行緒在1 imn內全部啟動Ramp-Up Steps Count
:階梯次數;若設定 6 ,則目標執行緒在 1min 內分六次階梯加壓(啟動執行緒);每次啟動的執行緒數
= 目標執行緒數 / 階梯次數 = 60 / 6 = 10Hold Target Rate Time
:持續負載執行時間;若設定 2 ,則啟動完所有執行緒後,持續負載執行 2 min,然後再結束Time Unit
:時間單位(分鐘或者秒)Thread Iterations Limit:
執行時間到達
Ramp Up Time + Hold Target Rate Time,則停止執行執行緒【不建議設定該值】
Log Threads Status into File:
將執行緒狀態記錄到檔案中(將執行緒啟動和執行緒停止事件儲存為日誌檔案);
2.1 特別注意點
- Target Concurrency只是個
期望值
,實際不一定可以達到這個併發數,得看上面的配置【電腦效能、網路、記憶體、CPU等因素都會影響最終併發執行緒數】
- Jmeter會根據Target Concurrency的值和當前處於
活動狀態的執行緒數
來判斷當前併發執行緒數是否達到了Target Concurrency;若沒有,則會不斷啟動執行緒,盡力讓併發執行緒數達到Target Concurrency的值
三、Concurrency Thread Group和Stepping Thread Group的區別
3.1 官方說法
- Stepping Thread Group不提供設定啟動延遲時間,階梯增壓過渡時間,階梯釋放過渡時間,但Concurrency Thread Group提供
- Stepping Thread Group可以
階梯釋放執行緒
,而Concurrency Thread Group是瞬時釋放
(具體看下面介紹) - Stepping Thread Group設定了需要啟動多少個執行緒就會
嚴格執行
,Concurrency Thread Group會盡力啟動執行緒達到
Target Concurrency值
3.2 通俗點理解
- Stepping Thread Group 是手動場景:測試過程,按照設定好的步驟執行
- Concurrency Thread Group 是目標場景:達到某個目標執行場景,測試過程不可控,動態變化
3.3 類比 LR
- Stepping Thread Group :設定併發使用者數,持續時間等,每隔多少時間自動增加多少個使用者
- Concurrency Thread Group:預設一個目標併發數,每隔一段時間增加一部分併發數,直到 TPS 達到目標併發數,然後持續執行一段時間
四、Concurrency Thread Group + Active Threads Over Time
4.1 第一個關注點:階梯增壓過程
看Concurrency Thread Group負載預覽圖每次階梯增壓都是瞬時增壓的,但是實際測試結果可以看到它也是有一個過渡期,並不是瞬時增壓
4.2 第二個關注點:持續負載執行結束後,所有執行緒瞬時釋放
- 從圖最後可以看到,所有執行緒都是瞬時釋放的
- 普通的執行緒組有三種狀態:啟動、執行、釋放;而Concurrency Thread Group的執行緒可以理解成只有兩種狀態:啟動、執行;因為執行緒都在極短的時間內就結束了
五、Concurrency Thread Group特殊情況
上圖可以看到,活躍狀態的執行緒上下波動的很厲害
5.1 大致原因
受環境穩定性影響,如電腦網路、記憶體、CPU;活躍執行緒數會有波動
5.2 如何解決
遇到這種情況可以多除錯幾次,看看情況如何
5.3 結論
- 其實有波動是正常的,我們沒必要糾結
- 我們要重點注意的是TPS
- 執行緒組的負載只是壓力值,我們要測的是服務端的效能,需要關注的是服務端的TPS
六、Concurrency Thread Group的擴充套件
- 當Concurrency Thread Group與Throughput Shaping Timer(吞吐量計時器)一起使用時,可以用tstFeedback 函式的呼叫來動態維護實現目標RPS所需的執行緒數
- 使用此方法時, 需要將Ramp Up Time 和 Ramp-Up Steps Count 置空
- 但要確保 Hold Target Rate Time ≥ Throughput Shaping Timer 時間表中指定的總持續時間值(Duration)
(後續實際用到的時候再補充吧)