jmeter進行分布式壓測過程與 注意事項


jmeter命令行運行但是是單節點下的, 
jmeter底層用java開發,耗內存、cpu,
如果項目要求大並發去壓測服務端的話,
jmeter單節點難以完成大並發的請求,
這時就需要對jmeter進行分布式測試:

1:先說說分布式測試原理

處理過程:

一:調度機master啟動以后,會拷貝本地的jmx文件分發到遠程的slave機器上;

二:slave機器拿到腳本以后啟動命令行模式去執行腳本,對於每台slave機器拿到的腳本都是一樣的,所以如果jmx腳本為50個線程跑3分鍾,那么實際並發就是50*3=150個線程並發跑3分鍾;

三:執行時,slave會把執行獲得的數據結果傳給master機器,master機器會收集所有slave機器的信息並匯總,這樣master機器上就存在一份所有slave機器匯總的數據結果。

一些術語的解釋:
  • master,以GUI模式運行,同時控制測試的運行,在這里就是client,啟動腳本所在的那台機器。
  • slave,運行jmeter-server並從master接收指令、向目標服務器發送請求

注意事項

一:我們注意到master機器啟動后會拷貝jmx文件到slave機器,所以我們不需要在每台slave機器上也上傳一份jmx,只需要在master機器上上傳一份jmx腳本即可。

二:參數化文件:如果使用csv進行參數化,那么需要把參數文件在每台slave上拷一份並且路徑必須需要設置成一樣的。

三:調度機(master)和執行機(slave)最好分開,由於master需要發送信息給slave並且會接收slave回傳回來的測試數據,所以mater自身會有消耗,所以建議單獨用一台機器作為master。

即master機不建議也作為壓測機。

四:保證每台機器的jmeter版本和插件版本相同,避免造成一些意外問題。

  jdk版本保證大版本一致,小版本可不一致。

  jmeter版本必須保證大小版本都一致。

五,注意監控壓測機器的CPU,內存,網絡。

六:分布式測試總樣本數 = 線程數 * 循環次數 * 執行機總數, 
樣本計數邏輯為:執行機slave執行的測試腳本是由調度機master分發的,
故每台執行機執行的測試腳本都是相同的,
故而性能測試總樣本數 = 測試腳本樣本數 * 執行機總數,
而測試腳本樣本數為線程數 * 循環次數

一、壓測機

1、數量&成本

無論是從成本角度還是維護的難易方面,壓測機的數量,適量就好。

舉個例子,8C16G的一台服務器,部署jmeter后,根據我個人的測試比對數據,配置≤1500個線程數,最好。太多了性能損耗較大,延時高;太少了又浪費。

2、controller&agent

模擬的並發線程數超過5K,我個人建議留出一台做專門的controller機器,主要是避免agent機器數據上報帶來的影響(如果有其他的數據存儲+可視化服務,可以忽略)。

3、服務授權

如果壓測啟動和服務配置都是root權限,那么在linux環境下,需要給jmeter和jmeter-server授權,命令為 chmod 777 jmeter ,授權后,顯示如下:

 

二、服務通信

1、網絡

所有的壓測機和被測服務,最好在同一個網段內,盡可能減少時延問題(如果不在同一個網段,就需要找運維建立專門的網絡通道,這個很浪費)。

2、端口

在分布式壓測配置時,需要在controller機器的jmeter.properties文件中配置agent機器的IP+端口,默認端口1099,如果該端口沒有被占用,則無需配置端口信息,比如:

3、內網和公網

如果壓測機在內網,而訪問的請求地址(現在都是統一的網關域名)在外網,就要注意一點:內網到公網一般是有帶寬限制的,最好在壓測開始前和運維確認。

三、數據切割

壓測時候需要用到參數化數據,有些業務場景是需要先登錄再進行操作的,或者某些數據具有唯一屬性。

在分布式壓測時候,需要注意,進行均勻的數據切割,確保每個請求的入參請求都是唯一的(可共用的參數不用切割)。

其實,在參數化數據准備階段,就應該考慮到這個問題,數據的可用性、唯一性以及數量級。

四、服務啟動

壓測機到位,服務授權配置好了,腳本也寫好了,網絡也沒問題,那么如何在NGUI模式(即linux環境)下啟動呢?

1、以服務形式啟動agent機

網上很多其他博客都寫着利用命令 ./jmeter-server 啟動壓測服務,但這樣有個缺點,只要服務連接中斷,這個壓測服務就不可用了。

但是以后台服務的形式啟動agent機器的jemter-server,就不用擔心服務不可用的問題,命令為 nohup sh jmeter-server & ,示意如下:

PS:注意,輸入如上命令后,需要回車兩次,然后通過命令,即可查看服務是否啟動成功。

2、壓測啟動的2種方式

①、指定壓測機啟動,命令: ./jmeter -n -t /path/test.jmx -R 127.0.0.1,127.0.0.2 

②、啟動所有壓測機,命令: ./jmeter -n -t /path/test.jmx -r ,示意如下:

3、更多命令

Apache-Jmeter-用戶手冊:命令行選項列表

 分布式壓測判定環境:

在性能測試過程中,如果要求並發數較大時(例如1000+),單機配置cpu與內存等無法支持,則需要使用Jmeter的分布式測試方法。

一、一般什么情況下需要分布式

1.前輩經驗:比如機器i5雙核的cpu,8g的內存。壓測一個簡單的接口,可以支持500+的並發。(但是如果壓測方案邏輯復雜,比如在jmeter里面加了很多控制器,監聽器,這些都是很耗機器性能,這時候可能連100並發都壓不上去)

2. 壓測過程中如果Jmeter未響應,卡住,反應慢,隨即啟動任務管理器,如果cup和內存特別大時,則說明單機扛不住了,則要使用分布式了

3. 隨着並發的增大,tps不會增長,即出現瓶頸(排除服務器瓶頸及其他),可能是本測試機扛不住了。則要分布式。

二、Jmeter分布式測試原理(原理摘抄前輩,感謝)

  1、Jmeter分布式測試時,選擇其中一台作為調度機(master),其它機器做為執行機(slave)。

  2、執行時,master會把腳本發送到每台slave上,slave 拿到腳本后就開始執行,slave執行時不需要啟動GUI,我理解它應該是通過命令行模式執行的。(如果引用到csv等外部的文件,則每台slaver所在的機器都需要相應位置放置該文件。)

  3、執行完成后,slave會把結果回傳給master,master會收集所有slave的信息並匯總。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM