全部產品
Search
文件中心

Performance Testing Service:常數輸送量分布式使用樣本

更新時間:Feb 16, 2025

常數輸送量定時器(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輸送量控制的實現

  1. 登入PTS控制台,選擇效能測試 > 建立情境,然後單擊JMeter壓測

  2. 開啟進階設定,在常數輸送量定時器中選擇單機生效

    說明

    只有上傳的指令碼中設定了定時器,情境配置中才會出現分布式適配設定的配置框。

    單機生效

  3. JMeter指令碼中將該組件(Constant Throughput Timer)置於Sampler下面。

  4. 設定Target Throughput100,單位為分鐘。計算模式選擇this thread only,如下圖所示。image

情境二:線程組輸送量控制的實現

  1. 登入PTS控制台,選擇效能測試 > 建立情境,然後單擊JMeter壓測

  2. 開啟進階設定,在常數輸送量定時器中選擇全域生效

    說明

    只有上傳的指令碼中設定了定時器,情境配置中才會出現分布式適配設定的配置框。

    全域生效

  3. JMeter指令碼中將該組件(Constant Throughput Timer)置於Thread Group下面。

  4. 設定Target Throughput100,單位為分鐘。計算模式選擇All active threads in current thread group,如下圖所示。image

5種計算模式

樣本:假設使用單台施壓源,2個線程組,即分別含有2個Sampler,分別是100並發和200並發,Target Throughput均是每分鐘100。

說明

以下樣本僅供參考,具體請以官方文檔為準,請參見JMeter官方文檔

基於的計算方式

說明

其他資訊

this thread only

每個線程單獨計算,那麼總的輸送量等於並發×Target Throughput。

非活躍的線程,沒有對應的輸送量,按照上述樣本(每分鐘):

  • 線程組1:每個線程每分鐘發出請求100次,即Sampler1.1和Sampler1.2各自的輸送量都是100線程×100次/60秒=83左右。

  • 線程組2:每個線程每分鐘發出請求100次,即Sampler2.1和Sampler2.2各自的輸送量都是200線程×100次/60秒=160左右。

  • 配置到Sampler上即可控制到單個Sampler的輸送量。

All active threads

將設定的輸送量,分配到活躍的線程上(所有線程組的所有線程),然後這個線程在上次運行自行結束之後,等待合理時間(為了控制輸送量)再次運行。

多線程組的時候,要求其他線程組也有一樣的配置按照上述樣本:

  • 因為線程是一開始就發出去,所以在執行第二個Sampler的時候,輸送量就會非常低。因為是從線程組維度控制的,每個線程輸送量分別是每分鐘為1和2,所以到第二個Sampler的時候,次數會減少。

  • 線程組的Throughput是每分鐘為100,全域的輸送量是每分鐘為200。

  • 需要運行一段時間之後(線程組內多個Sampler發出去的請求數一致=並發數),每個線程組內Sampler的輸送量才會趨於均衡。

All active threads in current thread group

將設定的輸送量,分配到活躍的線程上(當前線程組的活躍線程),然後這個線程在上次運行自行結束之後,等待合理時間(為了控制輸送量)再次運行。

單線程組的時候,與上一個相同。按照上述樣本:

  • 因兩個Timer的配置一致,故和上述情況一致。

  • 當把第二個Timer的輸送量改為每分鐘為200時,每個線程組可單獨控制。

All active threads(shared)

將設定的輸送量,分配到活躍的線程上(所有線程組的所有線程),所有線程都會在所有活躍線程運行結束之後即所有線程結束之後,等待合理時間(為了控制輸送量)再次運行。

類似全情境的多次延遲釋放,因為需要等待所有活躍線程運行結束,按照上述樣本分析如下:

  • 在壓測過程中,可以看到不會有多個Sampler的資料同時變化。

  • 已經發起過請求的線程會被暫停在第一個Sampler上。

  • 全情境的Target Throughput是為每分鐘100,且多個Timer的配置保持一致。

All active threads in current thread group(shared)

將設定的輸送量,分配到活躍的線程上(當前線程組的活躍線程),所有線程都會在所有活躍線程運行結束之後即所有活躍線程結束之後,等待合理時間(為了控制輸送量)再次運行。

當前線程組中,活躍線程組中線程結束之後,再等待一點時間運行。

  • 線程組的Target Throughput為每分鐘100,但每個線程會考慮全域其他活躍線程。

  • 線程組的輸送量可以單獨配置和控制。

其他計算模式的分布式適配情況

基於的計算方式

應用情境

全域生效

單機生效

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達到均衡的時間更短。