天天看點

jmeter性能測試疑難雜症解決思路

提問1

如何在大并發測試下,讓登入或者後續接口隻執行一次?

回答

這個問題網上的答案其實很多,但是大多不靠譜。

比如推薦使用僅一次控制器,但是僅一次控制器對線程組無效;比如推薦跨線程組調用,但是這樣比較繁瑣,新人也搞不定;

其實隻要各位對元件熟悉,這個問題很簡單

下圖100線程:

jmeter性能測試疑難雜症解決思路

添加一個吞吐量定時器,選擇總數計算

jmeter性能測試疑難雜症解決思路

下面這就ok了,是不是很簡單?

jmeter性能測試疑難雜症解決思路

提問2

大并發的登入之後,後續接口在做并發的時候有一些session重複了,并發量越大,重複幾率越高。如何保證後續并發的session不重複?

原因其實是因為jmeter的多線程存在競争機制,那麼并發量很大的時候,就會有一部分線程下的請求搶到了同樣的session。

我們可以把這些登入密碼在并發登入的時候先在本地儲存一份哦,用來代替使用者名密碼做登入參數!

比如下圖所示的session

jmeter性能測試疑難雜症解決思路

寫個小腳本把這些session儲存下來

jmeter性能測試疑難雜症解決思路
jmeter性能測試疑難雜症解決思路

後續并發的時候直接引用這些cookie就行了

jmeter性能測試疑難雜症解決思路
jmeter性能測試疑難雜症解決思路

但是這種也有缺點,腳本會略微的影響吞吐量

提問3

如何識别tps拐點

先分析下面這張圖。下面這張圖上展示了階梯負載量,響應時間,tps三種資料

jmeter性能測試疑難雜症解決思路

從圖上能看出來三個趨勢

1:tps升到一個相對高點之後,長期維持穩定,不再升高

2:運作一段時間之後,響應時間開始逐漸升高,但是趨勢不明顯

3:随着負載越來越高,tps長期保持穩定

分析:

在負載逐漸升高的情況下,tps卻長期不變。這并不是說明性能很穩定,而是說明我們機關時間内的單線程tps是在逐漸降低的(機關時間tps/總線程)。

再分析響應時間,我們的響應時間其實也是在逐漸升高,從側面反映出線程的tps是在下降的。

但是具體在多少負載量的時候我們的瓶頸點已經到來?這張圖上不好計算,我們換一個監聽器

jmeter性能測試疑難雜症解決思路

這張圖的趨勢就比較明顯了。随着負載升高,線程的tps逐漸達到一個高點,然後開始下降。那麼這個最高點就是我們的性能瓶頸點

提問4

jmeter做壓測的時候,性能監聽圖形毛刺過多,看的想吐怎麼辦

先秀一張圖階梯增壓的圖形,看看什麼是毛刺

jmeter性能測試疑難雜症解決思路

這個場景是階梯增壓,每5s加10個,加到200,然後持續運作

可以看出來tps曲線坑坑窪窪,高低不平,慘不忍睹,怎麼給它打磨一下?

修改setting

jmeter性能測試疑難雜症解決思路
jmeter性能測試疑難雜症解決思路

再回頭看一下圖形是不是沒那麼多毛刺了?

jmeter性能測試疑難雜症解決思路

但是tps曲線依然波動很劇烈,這是我們的壓力設定的不合理導緻的

下面把ramp up值改成10s,讓我們的線程壓力沒那麼大

jmeter性能測試疑難雜症解決思路
jmeter性能測試疑難雜症解決思路

響應時間的劇增總是伴随着tps的大跌

jmeter性能測試疑難雜症解決思路
jmeter性能測試疑難雜症解決思路

提問5

非GUI模式下做負載測試,修改參數好麻煩的說

把關鍵參數都設定成變量,在非GUI下引用就行了,就像下面介樣子

jmeter性能測試疑難雜症解決思路
jmeter性能測試疑難雜症解決思路

寫一個shell腳本,參數全部引用一下

jmeter性能測試疑難雜症解決思路
jmeter性能測試疑難雜症解決思路

bat執行的時候就像下面這個樣子,hin輕松有沒有~

jmeter性能測試疑難雜症解決思路

提問6

jmeter4444端口無法監聽遠端伺服器怎麼解決

4444端口在阿裡雲和騰訊雲服務上,是預設不開放的。想要監聽到,有兩種辦法,一種是防火牆開放4444端口,一種是更換端口。指令如下

./startAgent.sh --udp-port 0 --tcp-port 1234

jmeter性能測試疑難雜症解決思路

提問7

遠端機執行jmeter腳本,怎麼快速更換csv參數路徑?

隻需要在參數路徑中加入一組函數,就可以實作參數路徑自動定位,如下

${__P(user.dir,)}${__P(file.separator,)}test.txt

jmeter性能測試疑難雜症解決思路

這一組函數的作用是,不論在linux還是在本機,都可以自動切換路徑格式,不需要手動修改

Delay Thread creation until needed 是什麼意思?

jmeter的線程組裡面有一個Delay Thread creation until needed選項,如下圖。

jmeter性能測試疑難雜症解決思路

很多人不了解這個選項是什麼意思,或者根據官方解釋,認為它是延遲建立線程。但是延遲建立,在哪裡展現出來你?完全搞不清。

我們可以通過jdk的監聽器看一探究竟。

不勾選延遲建立

線程組設定1500線程,ramp up設定10s,不勾選延遲建立,循環次數設定為永遠。如下圖

jmeter性能測試疑難雜症解決思路

運作腳本之後,我們在活動線程監聽器裡面可以看到線程确實是10s内建立完成,如下圖

jmeter性能測試疑難雜症解決思路

但是我們在jdk工具裡面再看一下線程建立的過程,會發現線程幾乎在1s内就全部啟動完成了,如下圖

jmeter性能測試疑難雜症解決思路

勾選延遲建立

結論

繼續閱讀