Jmeter系列(11)- 併發執行緒組Concurrency Thread Group詳解
阿新 • • 發佈:2020-05-09
如果你想從頭學習Jmeter,可以看看這個系列的文章哦
https://www.cnblogs.com/poloyy/category/1746599.html
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 = 10
- Hold Target Rate Time:持續負載執行時間;若設定 6 ,則啟動完所有執行緒後,持續負載執行 2 min,然後再結束
- Time Unit:時間單位(分鐘或者秒)
- Thread Iterations Limit:執行緒迭代次數限制(迴圈次數);預設為空,理解成永遠,如果執行時間到達Ramp Up Time + Hold Target Rate Time,則停止執行執行緒【不建議設定該值】
- Log Threads Status into File:將執行緒狀態記錄到檔案中(將執行緒啟動和執行緒停止事件儲存為日誌檔案);
特別注意點
- Target Concurrency只是個期望值,實際不一定可以達到這個併發數,得看上面的配置【電腦效能、網路、記憶體、CPU等因素都會影響最終併發執行緒數】
- Jmeter會根據Target Concurrency的值和當前處於活動狀態的執行緒數來判斷當前併發執行緒數是否達到了Target Concurrency;若沒有,則會不斷執行緒,盡力讓併發執行緒數達到Target Concurrency的值
Concurrency Thread Group和Stepping Thread Group的區別
- 併發執行緒組不提供設定啟動延遲時間,階梯增壓過渡時間,階梯釋放過渡時間,但階梯執行緒組提供
- Stepping Thread Group可以階梯釋放執行緒,而Concurrency Thread Group是瞬時釋放(具體看下面介紹)
- Stepping Thread Group設定了需要啟動多少個執行緒就會嚴格執行,Concurrency Thread Group會盡力啟動執行緒達到Target Concurrency值
Concurrency Thread Group + Active Threads Over Time
第一個關注點:階梯增壓過程
看Concurrency Thread Group負載預覽圖每次階梯增壓都是瞬時增壓的,但是實際測試結果可以看到它也是有一個過渡期,並不是瞬時增壓
第二個關注點:持續負載執行結束後,所有執行緒瞬時釋放
- 從圖最後可以看到,所有執行緒都是瞬時釋放的
- 普通的執行緒組有三種狀態:啟動、執行、釋放;而Concurrency Thread Group的執行緒可以理解成只有兩種狀態:啟動、執行;因為執行緒都在極短的時間內就結束了
Concurrency Thread Group特殊情況
上圖可以看到,活躍狀態的執行緒上下波動的很厲害
大致原因
受環境穩定性影響,如電腦網路、記憶體、CPU;活躍執行緒數會有波動
如何解決
遇到這種情況可以多除錯幾次,看看情況如何
結論
- 其實有波動是正常的,我們沒必要糾結
- 我們要重點注意的是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)
(後續實際用到的時候再補充吧)
&n