在對項目做大并發性能測試時,常會碰到并發數比較大(比如需要支持10000并發),單臺電腦的配置(CPU和內存)可能無法支持,這時可以使用Jmeter提供的分布式測試的功能來搭建分布式并發環境。
一、Jmeter分布式執行原理
架構示意圖
need-to-insert-img
1、Jmeter分布式測試時,選擇其中一臺作為調度機(Master),其它機器作為執行機(Slave)。
2、執行時,Master會把腳本發送到每臺Slave上,Slave拿到腳本后就開始執行,Slave執行時不需要啟動GUI,只需要在Slave上執行對應的啟動命令,可以理解它是通過命令行模式執行的。
3、在被監控的Server服務器上安裝性能數據采集插件Agent后,在執行過程中,Agent會把結果實時回傳給Master,Master會收集所有Server的信息并匯總。
二、Jmeter安裝教程
1、JMeter需要JDK環境,所以需要先安裝JDK
2、下載JMeter的zip包
3、這里下載的是apache-jmeter-3.0.zip, 進行解壓
Windows使用工具解壓,例如:D:\Program Files (x86)\apache-jmeter-3.0
Linux使用unzip命令解壓,例如:unzip apache-jmeter-3.0.zip ?-d apache-jmeter-3.0 (-d 為指定要解壓到的文件夾名)
4、設置環境變量
Windows:右鍵“我的電腦”-》高級-》環境變量,在“系統變量”中點擊“新建”,在變量名中輸入:JMETER_HOME,變量值中輸入:D:\Program Files (x86)\apache-jmeter-3.0,點擊確定即可,再修改CLASSPATH變量,變量值中添加如下值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;% JMETER_HOME %\bin; ?然后點擊確定即可
Linux:不配置環境變量,執行的時候只需要先切換到安裝的目錄
5、檢查jmeter是否安裝OK
Windows:打開cmd命令,輸入jmeter.bat回車,也可以打開Jmeter的目錄,雙擊jmeter.bat文件,如果正常啟動Jmeter GUI界面則說明安裝配置成功
Linux:使用cd命令切換至Jmeter目錄下的bin目錄,然后使用輸入sh jmeter.sh啟動Jmeter GUI界面,彈出界面則說明安裝成功
三、執行機(slave)配置
執行機只負責接收調度機的任務去執行并發,配置比較簡單。
1、切換至已安裝好的Jmeter目錄下的bin目錄
Windows 雙擊jmeter-server.bat,啟動成功如下圖:
need-to-insert-img
Linux 通過cd命令切換至Jmeter目錄的bin目錄,執行
./jmeter-server -Djava.rmi.server.hostname=192.168.0.178 (后面為ifconfig查到的IP地址)
2、上圖上標紅的IP和端口會在master里配置時用到。IP就是slave機器IP,端口默認是1099,端口也可以自定義,見第五點。
3、如果有多臺slave機,重復1步驟。
四、調度機(Master)配置
調度機用作腳本配置、觸發啟動,服務器性能數據監控
1) 調度機負責腳本的分發
1、腳本創建:訪問百度
need-to-insert-img
2、配置Slave機信息,找到Jmeter的bin目錄下jmeter.properties文件,修改remote_hosts的內容,IP和Port是slave機的IP以及默認端口1099,此處的端口可以自定義,見第五點:
remote_hosts=192.168.0.178:1099,192.168.0.179:1099 多臺slave之前用","隔開,可以看到標紅的這個就是上面截圖slave的IP,端口默認為1099
3、打開Jmeter,選擇運行,有運程啟動、運程全部啟動兩個選項:
need-to-insert-img
4、選擇遠程啟動-->啟動單個Slave或者全部啟動
這里啟動了192.168.0.178:1099一臺slave,所以只有一個結果(線程數和循環次數都是1)
need-to-insert-img
slave控制臺信息:
need-to-insert-img
2)調度機負責性能數據的采集
性能測試時,我們的關注點有兩部分,第一服務本身并發、響應時間、QPS,第二服務器的資源使用情況:cpu memory I/O disk等,JMeter的plugins插件可以實現對"二"的監控,具體操作步驟如下(主要記錄我的實踐過程):
1、下載插件
訪問網址http://jmeter-plugins.org/downloads/all/,下載三個文件。其中JMeterPlugins-Standard和JMeterPlugins-Extras是Master調度機的,ServerAgent是Server服務機的。
need-to-insert-img
2、解壓Master調度機的兩個文件,進入其路徑JMeterPlugins-Extras(Standard)-1.3.1\lib\ex、JmeterPlugins-Extras.jar(JmeterPlugins-Standard.jar)兩個文件,放到JMeter客戶端的 lib/ext文件夾中,打開JMeter,可在監聽器中看到Permon Metrics Collector,客戶端配置成功。
need-to-insert-img
3、將ServerAgent-2.2.1.zip上傳到被測服務器,解壓,進入目錄,Windows環境,雙擊ServerAgent.bat啟動;linux環境執ServerAgent.sh啟動,默認使用4444端口,出現如下情況即服務端成功:
need-to-insert-img
4、ServerAgent啟動的校驗
a、 在筆記本電腦打開telnet監聽(控制面板-程序-打開或關閉Windows功能-telnet客戶端勾選打開)
b、cmd進入命令框,輸入如下內容:
telnet yourip ?4444 ? #連接ServerAgent
test #發送test進行測試
exit #退出,即斷開連接
c 、觀察server端是否有接收到消息,有出現則說明ServerAgent打開成功
5、Jmeter客戶端的監聽測試
a、打開JMeter.bat,添加監聽器Permon Metrics Collector-Add Row添加一行monitor配置(修改Host/IP為測試IP)-運行-觀察server日志即chart圖標內容。
need-to-insert-img
need-to-insert-img
b、添加線程組,設置循環次數為"永遠";為線程組任意添加一個Sampler(并不設置參數),點擊運行。如無意外可以獲取chart圖,點擊stop,即結束監聽數據。全部配置圖如下
need-to-insert-img
need-to-insert-img
need-to-insert-img
五、自定義端口:
上面其實已經實現了Jmeter的分布式測試,這部分主要介紹下如何自定義slave端口:
1、Slave:在slave機的Jmeter的bin目錄下,找到jmeter.properties文件,修改如下兩個配置項,比如修改為1888:
server_port=1888
server.rmi.localport=1888
2、啟動slave機上的jmeter-server.bat,如下圖,端口已經修改為:1888
3、Master:修改master機器的jmeter.properties文件:
remote_hosts=10.13.223.202:1000,10.13.225.12:1888
4、重啟jmeter.bat,如下圖,端口已經變了:
need-to-insert-img
六、其它說明:
1、調度機(master)和執行機(slave)最好分開,由于master需要發送信息給slave并且會接收slave回傳回來的測試數據,所以mater自身會有消耗,所以建議單獨用一臺機器作為mater。
2、參數文件:如果使用csv進行參數化,那么需要把參數文件在每臺slave上拷一份且路徑需要設置成一樣的。
3、每臺機器上安裝的Jmeter版本和插件最好都一致,否則會出一些意外的問題。