常數輸送量定時器(Constant Throughput Timer)通常用於控制輸送量,您可以根據壓測指令碼的業務目的,來選擇不同的計算模式。若疊加上分布式施壓源,您需要考慮指令碼中的配置值及配置模式,以便匹配不同的壓測目標模型。本文將從應用情境的角度介紹2種常見的使用模式,以及分布式適配不同計算模式的效果。
背景資訊
通過以下樣本您可以瞭解到不同的分布式適配方式。假設使用到2台施壓IP,並發為100,指令碼上僅1個線程組,其輸送量目標為每分鐘100,計算模式為當前線程(this thread only)。
全域生效即為指令碼中設定值為叢集整體閾值,施壓機會根據使用到的IP數來拆分到單機輸送量目標值上(即單施壓機閾值為指令碼中值/IP數),此時情境的總目標輸送量為2×(100並發/2 )×(100/2)=5000(每分鐘)。
單機生效即為指令碼中設定值為單台施壓機的目標值,不會替換指令碼內容,需要注意並發量級與配置值是否匹配。該模式下,情境的總目標輸送量為2×(100並發/2 )×100=10000(每分鐘)。
常見應用情境
通常配置輸送量控制時,您可以選擇Sampler維度或線程組維度(多線程組即全情境維度)即可,不推薦使用其他過於複雜的情境。以下樣本中使用了2台施壓機IP,線程組總並發100,目標輸送量每分鐘100。
情境一:Sampler輸送量控制的實現
登入PTS控制台,選擇效能測試 - 创建场景,然後單擊JMeter壓測。
開啟進階設定,在常數輸送量定時器中選擇單機生效。
說明只有上傳的指令碼中設定了定時器,情境配置中才會出現分布式適配設定的配置框。
選擇單機生效後,指令碼中設定的輸送量值為單台壓機的目標值,不會替換指令碼內容。需注意虛擬使用者量級與配置值是否匹配。例如使用 2 台施壓 IP、虛擬使用者為 100、指令碼中 1 個線程組、輸送量目標為 100/分鐘、計算模式為
this thread only時,情境合計目標輸送量為 2×(100 虛擬使用者/2)×100 單機吞吐 = 10000(/分鐘)。JMeter指令碼中將該組件(Constant Throughput Timer)置於
Sampler下面。設定Target Throughput為
100,單位為分鐘。計算模式選擇this thread only。
情境二:線程組輸送量控制的實現
登入PTS控制台,選擇效能測試 - 创建场景,然後單擊JMeter壓測。
開啟進階設定,在常數輸送量定時器中選擇全域生效。
說明只有上傳的指令碼中設定了定時器,情境配置中才會出現分布式適配設定的配置框。
當選擇全域生效時,指令碼中設定的輸送量值為叢集整體閾值,系統會根據實際使用的施壓 IP 數自動拆分到單機輸送量目標值上(即單施壓機調值=指令碼中值/IP 數)。例如:使用 2 台施壓 IP,1 個線程組,虛擬使用者為 100,輸送量目標為 100/分鐘,計算模式為當前線程(this thread only),則情境總目標輸送量為 2×(100 虛擬使用者/2)×(100 單機吞吐/2)= 5000(/分鐘)。
JMeter指令碼中將該組件(Constant Throughput Timer)置於
Thread Group下面。設定Target Throughput為
100,單位為分鐘。計算模式選擇All active threads in current thread group。
5種計算模式
樣本:假設使用單台施壓源,2個線程組,即分別含有2個Sampler,分別是100並發和200並發,Target Throughput均是每分鐘100。
以下樣本僅供參考,具體請以官方文檔為準,請參見JMeter官方文檔。
基於的計算方式 | 說明 | 其他資訊 |
this thread only | 每個線程單獨計算,那麼總的輸送量等於並發×Target Throughput。 | 非活躍的線程,沒有對應的輸送量,按照上述樣本(每分鐘):
|
All active threads | 將設定的輸送量,分配到活躍的線程上(所有線程組的所有線程),然後這個線程在上次運行自行結束之後,等待合理時間(為了控制輸送量)再次運行。 | 多線程組的時候,要求其他線程組也有一樣的配置按照上述樣本:
|
All active threads in current thread group | 將設定的輸送量,分配到活躍的線程上(當前線程組的活躍線程),然後這個線程在上次運行自行結束之後,等待合理時間(為了控制輸送量)再次運行。 | 單線程組的時候,與上一個相同。按照上述樣本:
|
All active threads(shared) | 將設定的輸送量,分配到活躍的線程上(所有線程組的所有線程),所有線程都會在所有活躍線程運行結束之後即所有線程結束之後,等待合理時間(為了控制輸送量)再次運行。 | 類似全情境的多次延遲釋放,因為需要等待所有活躍線程運行結束,按照上述樣本分析如下:
|
All active threads in current thread group(shared) | 將設定的輸送量,分配到活躍的線程上(當前線程組的活躍線程),所有線程都會在所有活躍線程運行結束之後即所有活躍線程結束之後,等待合理時間(為了控制輸送量)再次運行。 | 當前線程組中,活躍線程組中線程結束之後,再等待一點時間運行。
|
其他計算模式的分布式適配情況
基於的計算方式 | 應用情境 | 全域生效 | 單機生效 |
All active threads | 全情境輸送量控制驅動:多個線程組的業務模型類似,且全情境的輸送量固定,即可拆分到單個線程組的均勻輸送量。 | 單機並發線程是50,Target/2替換為指令碼中的值,即單機上的輸送量變成指令碼中的一半為每分鐘50。全域的輸送量不變化仍然為每分鐘100。當有多個線程組的時候,還會多個線程組累加。 | 單機並發線程是50,單機上的輸送量為每分鐘100,全域輸送量變為指令碼中的值×IP數,即為每分鐘200。當有多個線程組的時候,還會多個線程組累加。 |
All active threads(shared) | 全情境輸送量不區分線程組,略低於多線程組配置值疊加。 | 線程組1配置是100,線程組2配置是200,則全域為150,即兩個線程組的均值。 | 線程組1配置是100,線程組2配置是200,則單機為(100+200)/2,全域為300,但是單機多個Sampler達到均衡的時間更長。 |
All active threads in current thread group(shared) | 線程組的輸送量考慮全域活躍,略低於多線程組配置值疊加。 | 線程組1配置是100,線程組2配置是200,則全域為300,是線程組1和2的配置數累計之和。 | 線程組1配置是100,線程組2配置是200,則單機為100+200,全域為600,但是單機多個Sampler達到均衡的時間更短。 |