1、場景
在做性能測試時,單台機器進行壓測可能達不到預期結果。主要原因是單台機器壓到一定程度會出現瓶頸。也有可能單機網卡跟不上造成結果偏差較大。
例如4C8G的window server機器,使用UI方式,最高壓測在1800並發(RT 20ms以內)左右。如果對於XML文件進行解析,更容易吃CPU,並發數會更低。
當單台機器不能支持更大的並發時需要考慮分布式壓力測試。
2、原理
原理圖如下:
- Jmeter分布式測試時,選擇其中一台作為調度機(master),其它機器做為執行機(slave)
- master通過GUI界面啟動slave機器,將jmeter壓測發送給每台啟動的slave
- slave啟動jmeter-server,獲得腳本后開始執行
- slave執行完成后將結果傳回給master,master收集整合顯示
3、注意事項
- 關閉防火牆和殺毒軟件,開放端口
$ service firewalld stop
$ service iptables stop
2.所有機器最好在同一個子網上
可以使用ping命令進行檢查
3.所有機器中最好使用相同版本的jdk和jmeter
4.禁用SSL
如果在啟動jmeter-server.bat 時出現如下錯誤,則SSL沒有禁用
禁用方法,jmeter.properties文件下查找server.rmi.ssl.disable,取消注釋,並將其值修改為true:server.rmi.ssl.disable=true
4、slave配置
在slave機器中,啟動bin目錄下的 jmeter-server.bat,如下圖:
啟動后的ip和port為:192.168.10.131:50043
當然啟動時端口也是可以自定義的。
在slave機器的 Jmeter的bin目錄下,修改jmeter.properties文件下的server_port和server.rmi.localport兩個配置項。比如修改為1000:
server_port=4444
server.rmi.localport=4444
啟動后的ip和port為:192.168.10.131:4444
5、master配置
在master機器的 Jmeter的bin目錄下,修改jmeter.properties文件下的remote_hosts項,添加IP和port,多台slave的情況下,使用逗號(,)進行分割。
完成配置后啟動master機器上的 jmeter。
在Run>>Remote Start下可以查看配置的remote_hosts項。
注意:如果jmeter已經啟動,修改jmeter.properties文件后需要重啟jmeter配置項才可以生效。
6、腳本執行
新建一個線程組,線程組下添加一個debug sampler調試采樣器和一個樹結構監聽器
將debug sampler重新命名為:${__machineIP()} ,該函數的意思是獲取執行機器的ip
通過菜單欄的開始按鈕運行腳本
通過 Run>>Remote Start>>192.168.10.131:4444運行腳本
如果要同時在所有的 slave 機器上運行,則通過 Run>>Remote Start All 執行腳本
注意:
在分布式執行中,master向slave發送測試計划時不會將外部文件一起發送。所以在測試中如果使用csv等外部文件進行參數化,則需要把參數文件在每台slave上拷貝一份,最好都放置在bin目錄下,因為Jmeter會直接從bin目錄下查找。