一、背景:

之前在Jmeter插件監控伺服器性能一篇中說到,在非GUI環境中監控時為了保存監控數據需要修改jmeter腳本,並且每次通過施壓機(遠程伺服器,非GUI環境)來壓測時都要將jmeter腳本上傳然後在伺服器上通過命令行啟動,測試完成後再把結果數據下載到本地GUI環境中查看,總是有很多不方便。

本次壓測需求需要很大的並發量,例如3000,但是單臺施壓機難以實現,因此希望多臺施壓機並行,並且我能同步控制它們。

在這樣的需求下經過瞭解,jmeter工具本身有一個很強大的遠程啟動功能,於是嘗試了一下。

二、jmeter分散式原理

這個遠程啟動,網上說的高大上一點,就是jmeter的分散式控制~ 具體控制如下圖:

客戶端機器作為一個控制器controller,控制多臺slave機器的操作。

controller通過GUI界面啟動slave機器,將jmeter壓測發送給每臺啟動的slave,slave獲得腳本後開始執行。slave本地不需預先存儲腳本; 各臺slave執行完成後,將結果傳回給controller,controller收集整合顯示。 三、jmeter遠程啟動配置

伺服器(slave)配置

伺服器(slave)需安裝jmeter,最好與客戶端(controller)保持同版本,jdk最好也保持同版本,無法滿足時至少保證伺服器上的jmeter能正常運行(如jmeter3.0以後需要jdk1.7及以上版本)。

在slave的%JMETER_HOME%bin目錄下執行./jmeter-server命令啟動jmeter服務就可以,啟動成功如下圖:

注意:上圖紅框中的ip為伺服器的ip地址,當伺服器有多網卡時它會隨機挑選一個網卡使用,紅框中的埠號port為啟動jmeter服務監聽的port,一般會有個默認埠號1099,但最好自定義,確保埠號不衝突。修改方法在下文介紹。

客戶端(controller)配置

在客戶端上要保證執行命令能發送到伺服器,因此需配置客戶端遠程的ip地址和port。在客戶端安裝目錄的bin文件夾下,找到jmeter.properties,修改配置如下圖,其中ip和port即為上一步slave的ip和port,如上圖中jmeter-server啟動時紅框中顯示的內容。多個slave機器的配置可通過逗號分隔。

配置完成後打開客戶端jmeter的GUI界面,在運行-遠程啟動中即可看到自己配置的slave機器。

添加一個腳本,點擊遠程啟動即可啟動運行slave機器,此時在伺服器上可看到控制檯信息,在客戶端通過監聽器-聚合報告或察看結果數可看到執行結果。

四、問題

slave機器的自定義埠號配置

在slave機器的%JMETER_HOME%bin目錄下找到jmeter.properties,修改如下兩項配置,即可自定義埠號:

修改後執行服務端的jmeter-server即可看到控制檯消息中修改是否生效;修改生效後需在客戶端修改相應的jmeter.properties下的remote_hosts。

slave機器和客服端多網卡的問題

我在執行過程中slave機器的jmeter-server.log和客戶端的jmeter.log中均報錯提示connect refused。經過檢查後發現伺服器上有2個網卡,客戶端有兩個網卡,兩臺機器通過vpn在內網環境通信。而jmeter在遠程通信的時候是隨機選擇一個網卡的ip,這樣很容易導致連接不成功。

可通過如下配置指定伺服器和客戶端的網卡,在伺服器端的jmeter-server文件中,修改配置指定伺服器端的網卡ip

在客戶端的jmeter.bat中修改配置指定客戶端的網卡ip

在修改配置後嘗試遠程啟動,發現還是不成功,打開客戶端jmeter.log,發現客戶端發送成功;打開伺服器端的jmeter-server.log顯示伺服器連接客戶端不成功,嘗試ping了一下也確實ping不通,然後網上搜了一下說是因為客戶端的防火牆阻止了,關閉客戶端所有防火牆,再次執行,測試成功。

依賴文件報錯的問題

當jmeter腳本中需要依賴csv等數據文件時,該文件需上傳至伺服器,並需要設置正確的路徑。

JMeter遠程啟動測試中出現結果的響應數據為空,原因是:

分散式測試中,通過遠程啟動代理伺服器,注重的而是高並發,默認查看結果樹中的響應 數據為空,只有錯誤信息會被報回。

更多性能測試方面的文章,請前往51Testing軟體測試網-中國軟體測試人的精神家園掌握哦~


推薦閱讀:
相關文章