解決辦法:
1.控制機和代理機:修改jmeter.properties中server.rmi.ssl.disable=true 不啟動SSL
2.控制機和代理機: Slave(從壓力機)啟動jmeter-server時添加-Djava.rmi.server.hostname參數,即
./jmeter-server -Djava.rmi.server.hostname=從壓力機ip地址(linux下)
jmeter-server -Djava.rmi.server.hostname=從壓力機ip地址(windows)
https://www.cnblogs.com/suntingme/p/5995721.html
一、背景:
- 之前在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機器的配置可通過逗號分隔。
remote_hosts=10.165.124.6:1029
-
配置完成后打開客戶端jmeter的GUI界面,在運行-遠程啟動中即可看到自己配置的slave機器。
-
添加一個腳本,點擊遠程啟動即可啟動運行slave機器,此時在服務器上可看到控制台信息,在客戶端通過監聽器-聚合報告或察看結果數可看到執行結果。
四、問題
slave機器的自定義端口號配置
- 在slave機器的%JMETER_HOME%bin目錄下找到jmeter.properties,修改如下兩項配置,即可自定義端口號:
server_port=1029
server.rmi.localport=1029
- 修改后執行服務端的jmeter-server即可看到控制台消息中修改是否生效;修改生效后需在客戶端修改相應的jmeter.properties下的remote_hosts。
slave機器和客服端多網卡的問題
- 我在執行過程中slave機器的jmeter-server.log和客戶端的jmeter.log中均報錯提示connect refused。經過檢查后發現服務器上有2個網卡,客戶端有兩個網卡,兩台機器通過vpn在內網環境通信。而jmeter在遠程通信的時候是隨機選擇一個網卡的ip,這樣很容易導致連接不成功。
- 可通過如下配置指定服務器和客戶端的網卡,在服務器端的jmeter-server文件中,修改配置指定服務器端的網卡ip
RMI_HOST_DEF=-Djava.rmi.server.hostname=10.165.124.6
在客戶端的jmeter.bat中修改配置指定客戶端的網卡ip
增加配置項:set rmi_host=-Djava.rmi.server.hostname=10.165.120.4 修改配置項:set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %CLASS_UNLOAD% %DDRAW% %rmi_host%
- 在修改配置后嘗試遠程啟動,發現還是不成功,打開客戶端jmeter.log,發現客戶端發送成功;打開服務器端的jmeter-server.log顯示服務器連接客戶端不成功,嘗試ping了一下也確實ping不通,然后網上搜了一下說是因為客戶端的防火牆阻止了,關閉客戶端所有防火牆,再次執行,測試成功。
依賴文件報錯的問題
- 當jmeter腳本中需要依賴csv等數據文件時,該文件需上傳至服務器,並需要設置正確的路徑。