溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Jmeter之仿真高并發(fā)測(cè)試(集合點(diǎn))

發(fā)布時(shí)間:2020-07-31 14:01:28 來源:網(wǎng)絡(luò) 閱讀:120377 作者:Ye_Kwii 欄目:軟件技術(shù)

場(chǎng)景:

大家在使用Jmeter測(cè)試的時(shí)候應(yīng)該發(fā)現(xiàn)了,

(1)線程啟動(dòng)了就會(huì)直接發(fā)送測(cè)試請(qǐng)求;--如果要模擬在一瞬間高并發(fā)量測(cè)試的時(shí)候,需要調(diào)高線程數(shù)量,這很耗測(cè)試機(jī)器的性能,往往無法支持較大的并發(fā)數(shù),無法控制每次測(cè)試的瞬間并發(fā)量;

(2)如果使用了constant throughput timer,可以模擬較長(zhǎng)時(shí)間的并發(fā)測(cè)試,但是仍無法滿足穩(wěn)定的瞬間高并發(fā)測(cè)試;


解決:

1、使用集合點(diǎn);

作用:阻塞線程,直到指定的線程數(shù)量到達(dá)后,再一起釋放,可以瞬間產(chǎn)生很大的壓力。

引用蟲師的話“紅軍排長(zhǎng)說:等一等!集結(jié)了所有戰(zhàn)友后,大家再一起沖啊!這樣給敵人的壓力是最大的?!?br />


操作步驟

1、添加集合點(diǎn),在Jmeter里是synchronized timer;

Jmeter之仿真高并發(fā)測(cè)試(集合點(diǎn))


2、面板說明及設(shè)置

Jmeter之仿真高并發(fā)測(cè)試(集合點(diǎn))


(1)面板說明

1)名稱:自定義名稱

2)Number of Simulated Users to Group by

 Define how many simulated users trigger the release of the synchronizing block(default value of '0'means all users).

即a.每集合夠多少個(gè)模擬用戶(線程)后發(fā)送一次測(cè)試請(qǐng)求;

b.如果設(shè)置為0,等同于設(shè)置為線程租中的線程數(shù);

c.確保設(shè)置的值不大于它所在線程組包含的用戶數(shù)(線程數(shù))-- 一直集結(jié)線程而不發(fā)出測(cè)試請(qǐng)求,直到超時(shí)(如果設(shè)置了的話)。


例子說明:“Number of Simulated Users to Group by: 5”表示并發(fā)量是5。也就是說,Jmeter會(huì)等到5個(gè)線程都運(yùn)行到此處時(shí),這五個(gè)線程才開始執(zhí)行后面的操作,先到達(dá)的線程將會(huì)在此等候。


3)Timeout in milliseconds

 If set to 0,no timeout will occur;if superior to 0,then if after the timeout interval the number of users waiting is not reached,timer will stop waiting.

即a.超時(shí)時(shí)間,即多少毫秒后同時(shí)釋放已集結(jié)的的線程,發(fā)送測(cè)試請(qǐng)求;

b.如果設(shè)置為0,Timer將等待線程數(shù)達(dá)到了"Number of Simultaneous Users to Group"中設(shè)置的值才釋放。如果大于0,那么如果超過Timeout in milliseconds中設(shè)置的最大等待時(shí)間(毫秒為單位)后還沒達(dá)到"Number of Simultaneous Users to Group"中設(shè)置的值,Timer將不再等待,釋放已到達(dá)的線程。


(2)設(shè)置

我們這里設(shè)置Number of Simulated Users to Group by :10

Timeout in milliseconds :500


3、設(shè)置線程組屬性

因?yàn)楝F(xiàn)在是使用集合點(diǎn)來實(shí)現(xiàn)高并發(fā)測(cè)試,所以現(xiàn)在線程組屬性中就可以設(shè)置線程在較長(zhǎng)的時(shí)間來啟動(dòng),這樣測(cè)試機(jī)器的壓力就會(huì)相對(duì)小一點(diǎn);

Jmeter之仿真高并發(fā)測(cè)試(集合點(diǎn))


4、添加相關(guān)請(qǐng)求,結(jié)果樹等,運(yùn)行查看效果

Jmeter之仿真高并發(fā)測(cè)試(集合點(diǎn))

通過結(jié)果樹可以看到,請(qǐng)求是批量執(zhí)行的;

1)開始執(zhí)行的腳本,觀察請(qǐng)求的增加數(shù)量趨勢(shì);

2)對(duì)比請(qǐng)求的發(fā)送時(shí)間;


4、其他實(shí)踐

(1)實(shí)踐1--synchronizing timer應(yīng)用于多個(gè)sampler中的其中一個(gè)

如果希望定時(shí)器僅應(yīng)用于其中一個(gè)sampler,則把該定時(shí)器作為子節(jié)點(diǎn)加入,如下圖

定時(shí)器僅僅對(duì)其上的HTTP請(qǐng)求1起作用,即僅在HTTP請(qǐng)求1執(zhí)行前執(zhí)行定時(shí)器,和HTTP請(qǐng)求2無關(guān)。

Jmeter之仿真高并發(fā)測(cè)試(集合點(diǎn))


(2)實(shí)踐2--synchronizing timer應(yīng)用于多個(gè)sampler

如下,執(zhí)行HTTP請(qǐng)求1和HTTP請(qǐng)求2前都會(huì)執(zhí)行同步定時(shí)器1、2。當(dāng)執(zhí)行一個(gè)sampler之前時(shí),和sampler處于相同作用域的定時(shí)器都會(huì)被執(zhí)行;

Jmeter之仿真高并發(fā)測(cè)試(集合點(diǎn))


注意點(diǎn)

1、網(wǎng)上部分人說“集合點(diǎn)的位置一定要在Sample(采樣器)之前才能生效?!?/p>

此言差矣,在Jmeter中,timer是在sampler之前執(zhí)行的。不管這個(gè)定時(shí)器的位置放在sampler之后,還是之前。當(dāng)然,如果有多個(gè)timer的時(shí)候,在相同作用域下,會(huì)按上下順序執(zhí)行timer,這個(gè)就需要慎重放置timer的順序;

不過,為了更好的可讀性,還是建議將timer放在對(duì)應(yīng)的sampler前面 或 子節(jié)點(diǎn)中;


2、Synchronizing timer 僅作用于同一個(gè)JVM中的線程。

  所以,如果使用并發(fā)測(cè)試,確保"Number of Simultaneous Users to Group by"中設(shè)置的值不大于它所在線程組包含的用戶數(shù)。

 (原文:Synchronizing timer blocks only within one JVM, so if using Distributed testing ensure you never set "Number of Simultaneous Users to Group by" to a value superior to the number of users of its containing Thread group considering 1 injector only)


試想:a.如果分布式測(cè)試時(shí),synchronizing timer作用于所有jvm,那么jvm之間或者說監(jiān)控jvm工作的部件就需要頻繁通訊,確定線程的數(shù)量及狀態(tài)等,然后集結(jié)了足夠的線程后,又要發(fā)送信號(hào)讓Jmeter來發(fā)送測(cè)試請(qǐng)求,中間存在延時(shí),這樣就無法模擬更真實(shí)的高并發(fā)了,而且這個(gè)東西還會(huì)消耗測(cè)試機(jī)器的一部分性能,會(huì)給測(cè)試結(jié)果帶來負(fù)面影響;

所以暫時(shí)是只支持控制單個(gè)jvm,如果后面有辦法解決上面那些問題后,就可以實(shí)現(xiàn)控制多個(gè)jvm,控制總并發(fā)量;


b.如果分布式測(cè)試,并使用了Synchronizing timer,且設(shè)置的值是小于單個(gè)jvm的線程數(shù)量;

但是,較難確保所有jvm都在同一時(shí)間點(diǎn)集結(jié)了同樣數(shù)量的線程數(shù),這樣就很難下測(cè)試結(jié)論了,因?yàn)槎疾恢朗嵌嗌俨l(fā)下的性能表現(xiàn);當(dāng)然了,可以將線程的啟用時(shí)間拉長(zhǎng),并將超時(shí)時(shí)間延長(zhǎng),這樣就很可能會(huì)與同一時(shí)刻集結(jié)到足夠的線程,達(dá)到超高并發(fā)的測(cè)試;

所以,分布式測(cè)試與Synchronizing timer一般不是同時(shí)使用的;如果非要用,則需要慎重設(shè)置相關(guān)參數(shù);


3、如果設(shè)置Timeout in milliseconds為0,且線程數(shù)量無法達(dá)到"Number of Simultaneous Users to Group by"中設(shè)置的值,那么Test將無限等待,除非手動(dòng)終止。

這個(gè)無法達(dá)到的情況有如下幾種:

a.設(shè)置的值大于線程數(shù)量,這樣就永遠(yuǎn)無法達(dá)到了;

b.最后一批線程數(shù)不夠集合點(diǎn)數(shù)目;


參考鳴謝:

(1)zjq001X(十一)jmeter-集合點(diǎn)---學(xué)習(xí)筆記:http://blog.csdn.net/zjq001x/article/details/53107159


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI