在性能測試過程中,如果要求並發數較大時(例如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的信息並匯總。
三、操作步驟
寫在前面大大的注意啦:
*****master和slave機中的jmeter版本必須一致(小版本也得一致)。
******java的版本也得一致,不能一個java7一個java8(只要大版本一致即可).
1. 執行機slave配置:
1.1 安裝jmeter,配置環境變量
1.2在slave機中jmeter-server中
windows 修改RMI_HOST_DEF=-Djava.rmi.server.hostname=10.120.11.82(slave機的ip)
運行jmeter-server,Windows運行jmeter-serve.bat (
linux: ./jmeter-server -Djava.rmi.server.hostname=10.120.11.82(slave機的ip))
1.3 上圖上標紅的IP和端口會在master里配置時用到。IP就是slave機器IP,端口默認是1099,端口也可以自定義,這里我自定義為9999,這個后面說。
1.4多台slave的話,重復1~4步驟。
2. 啟動master
2.1 找到Jmeter的bin目錄下jmeter.properties文件,修改如下配置,IP和Port是slave機的IP以及自定義的端口
remote_hosts=XXXXXXXXX:9999,XXXXX:9999 (多台slave之前用","隔開)
2.2 雙網卡需要注意:master機需要指定自己機器的ip,要不則會出問題。(非雙網卡可以跳過)
window:
新增set rmi_host=-Djava.rmi.server.hostname=10.120.11.214(master 的ip)
修改set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%
linux:
新增 rmi_host=“-Djava.rmi.server.hostname=10.120.11.214”(master 的ip)
修改ARGS="$SERVER $DUMP $HEAP $NEW $SURVIVOR $TENURING $PERM $CLASS_UNLOAD $rmi_host"
4、開始測試
4.1master啟動jmeter,打開腳本
設置好並發數等,選擇遠程全部啟動
4.2slaver控制台信息
5. 自定義端口
5.1、slave:在slave機的Jmeter的bin目錄下,找到jmeter.properties文件,修改如下兩個配置項,比如我這里修改為9999:
server_port=9999
server.rmi.localport=9999
5.2、啟動slave機上的jmeter-server.bat端口已經修改為:9999
5.3、master:修改master機器的jmeter.properties文件:
remote_hosts
5.4、重啟jmeter.bat
備注:調度機(master)和執行機(slave)最好分開,由於master需要發送信息給slave並且會接收slave回傳回來的測試數據,所以mater自身會有消耗,所以建議單獨用一台機器作為mater。