一、為什么要進行分布式部署Jmeter
對於並發量很大的需求,如上萬並發量,受到CPU和內存的限制,單機模擬場景是實現不了的,為了讓JMeter提供更大的負載能力,須使用它的分布式機制,即多台機器同時產生負載的功能。
以下參數分析可用於配置負載分布台數的參考:通常,4G內存最多可達到2000左右的並發量。在1.4G Hz~3GHz 的CPU 、1GB 內存的 JMeter 客戶端上,可以處理線程 100~300。但是Web Service 例外。XML處理是 CPU 運算密集的,會迅速消耗掉所有的CPU 。一般來說,以XML技術為核心的應用系統,其性能將是普通Web 應用的 10%~25% 。另外,如果所有負載由一台機器產生,網卡和交換機端口都可能產生瓶頸,所以一個JMeter 客戶端線程數不應超過 100 。其實我們可以根據這個大概的情況自己調試一下,比如單機上放一個數量級的並發量 500、1000跑起來看看CPU的使用情況,最佳狀態是CPU占有率不超過80%。
二、Jmeter分布式執行原理
1、Jmeter分布式測試時,選擇其中一台作為調度機(master),其它機器做為執行機(slave or Agent)。
2、腳本在master的GUI打開,測試計划僅在master上部署即可,執行時,master GUI會把測試計划發送到每台slave上,slave 拿到腳本后就開始執行,slave執行時不需要啟動自己的GUI。每一台jmeter遠程服務器都執行相同的測試計划,jmeter不會在執行期間做負載均衡,每一台服務器都會完整地運行測試計划。
3、執行完成后,slave會把結果回傳給master,master會收集所有slave的信息並匯總。
三、分布式集群的配置
在部署前請保證各slave機的防火牆處於關閉狀態,master與各台slave都可以ping通
1、執行機(slave)配置:
(1)slave機上需要安裝Jmeter和支持當前Jmeter版本的JDK。(有時在運行Jmeter時會提示JDK版本過低)
(2)添加環境變量:JMETER_HOME路徑為bin目錄的上一級目錄
這樣啟動jmeter-server服務時,就只會看到Found ApacheJMeter_core.jar
(3)啟動bin目錄下的:jmeter-server.bat(Linux下是jmeter-server),啟動成功如下圖。
Windows:
Linux:
Linux下啟動jmeter-server有時會報錯,提示“為知的名稱或服務”,如下圖:
解決辦法:
1、cat /etc/sysconfig/network查看本機的主機名
2、vi /etc/hosts添加一行本機ip跟主機名映射
(4)上圖上標紅的IP和端口會在master里配置時用到。IP就是slave機器IP,端口默認是1099,端口也可以自定義,這里我改成了1000和1100。
(5)多台slave的話,重復1~4步驟就好。
2、調度機(master)配置:
(1)找到Jmeter的bin目錄下的配置文件jmeter.properties,修改如下配置:
remote_hosts=127.0.0.1:1000,192.168.182.130:1200,192.168.182.129:1100(多台slave之前用 "," 隔開)
(2)用Jmeter打開測試腳本,為了調試方便,可以為腳本添加“查看結果樹”和“聚合報告”。
(3)打開Jmeter,選擇運行→遠程啟動,可以依次點擊遠程啟動中的slave來執行腳本,對應的slave命令行窗口上會看到啟動的信息,全部啟動的話可以選擇遠程全部啟動。遠程停止同理,也可以遠程退出。
每一台slave都執行相同的測試計划,就是在master上設定好的測試計划。
slave向master回傳信息時如果請求執行成功了則不回傳具體每個請求的Response信息,當你用查看結果樹查看結果時,只能看到取樣結果是200,而響應數據里面是空的。
slave控制台信息:
四、自定義端口
1、在slave機的Jmeter的bin目錄下,找到jmeter.properties文件,修改如下兩個配置項,比如我這里修改為1200:
server_port=1200
server.rmi.localport=1200
2、啟動slave機上的jmeter-server.bat,如下圖,端口已經修改為:1200
3、修改master機器的jmeter.properties文件:
remote_hosts=127.0.0.1:1000,192.168.182.130:1200,192.168.182.129:1100
4、重啟jmeter.bat,如下圖,端口已經變了
五、其它說明
1、調度機(master)和執行機(slave)最好分開,由於master需要發送信息給slave並且會接收slave回傳回來的測試數據,所以mater自身會有消耗,所以建議單獨用一台機器作為mater。
2、參數文件:如果使用csv進行參數化,那么需要把參數文件在每台slave上拷一份且路徑需要設置成一樣的,Filename這里設定一下(最好放在bin目錄下)。
3、每台機器上安裝的Jmeter版本和插件最好都一致,否則會出一些意外的問題。
4、如果想要master也分擔負載,讓master自身也執行測試計划,需要把master 的 IP 和 端口也寫到配置文件里,在遠程啟動前,也要把master的 jmeter-server.bat運行,這樣master也能和其他slave一起執行測試計划了。