JMeter分散式壓測/JMeter負載新增/jmeter負載均衡/jmeter Windows系統壓測負載新增

Shelly_Zhao發表於2020-10-13

JMeter分散式壓測/JMeter負載新增/jmeter負載均衡/jmeter Windows系統壓測負載新增

測試軟體:jmeter5.2.1
在這裡插入圖片描述

適用環境:Windows

一.jmeter分散式壓測原理:
使用Master-Slave模式,用master機控制多臺slave負載機,向被測伺服器傳送請求,從而能夠支援需要高數量級併發。
注意事項:

  • 01、master和slave可以使用windows和linux,可以都使用Linux
    02、master和slave要在相同區域網路(IP段相同,相互可以ping通)
    03、要關閉本地防火牆和相關的防毒軟體(或其他攔截性軟體)

二.環境準備
01、在本機及負載機均正常安裝jmeter(安裝步驟自行百度)
安裝jdk請參考: https://blog.51cto.com/11009785/2376310
安裝JMeter參考:https://blog.51cto.com/11009785/2388386

02、安裝負載機(Slaves)步驟(Windows系統)
操作物件:
Slaves機器

1.修改slave機器jmeter.properties檔案屬性:

-server_port=8989(自定義埠號,避免被佔用)
-server.rmi.localport=8989(跟上面設定的埠號一致)
-server.rmi.ssl.disable=true

2.修改jmeter-server(見圖):

-RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.0.106(繫結slave本機ip)
啟動slave機上jmeter bin目錄下的jmeter-server(jmeter-server.bat for windows),記住 ip 和 埠號port
在這裡插入圖片描述
操作物件:
Master機器

1.修改master機器jmeter.properties檔案屬性:

-server.rmi.ssl.disable=true
-remote_hosts=192.168.0.106:1234(與slave上配置的ip、port對應)

備註:若有多個slave,使用英文逗號分隔多個ip、port,如remote_hosts=ip1:port1,ip2:port2
在master機上,開啟測試指令碼,啟動–>遠端啟動slave機,可以啟動單個slave或全部啟動
在這裡插入圖片描述
end

在這裡插入圖片描述

注意事項:

(1)master統計的結果是所有slave的資料之和

     分散式測試總樣本數=執行緒數 x 迴圈次數 x slave負載機數量

(2)若master和slave無法連線,可能是防火牆的問題,要關閉系統防火牆,如何關閉請檢視:

      https://blog.51cto.com/11009785/2388623

(3)如果監聽器中沒有返回執行結果,可能是網路有問題,或者引數檔案路徑有問題

     可檢視的日誌有:slave機jmeter bin目錄下的jmeter-server.log

     可參考的文章有:

     https://blog.51cto.com/11009785/2388476

     https://blog.51cto.com/11009785/2388615

(4)當指令碼有依賴檔案時,必須要拷貝到slave機相同目錄下(建議jmeter bin目錄,避免出錯)

(5)使用檢視結果樹檢視時,會發現只有請求,沒有響應的情況,如下圖,是正常的
如有必要,可以設定斷言,這樣即使看不到響應,也能知道請求成功或失敗

更多問題參考:
沒問題以下不用看:
參考文章:https://blog.csdn.net/dev666/article/details/79776450

安裝常見問題
1、問題
[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server
Created remote object: UnicastServerRef2 [liveRef: [endpoint::39308,objID:[24e78a63:16243c70661:-7fff, 7492480871343944173]]]
Server failed to start: java.rmi.RemoteException: Cannot start. Unable to get local host IP address.; nested exception is:
java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known
An error occurred: Cannot start. Unable to get local host IP address.; nested exception is:
java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known

解決:
hostname 命令獲取機器名稱,追加一個對映 iZwz95j86y235aroi85ht0Z
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
120.79.160.143 iZwz95j86y235aroi85ht0Z
windows使用者 修改c:\windows\system32\drivers\etc\hosts檔案,增加一條域名 與IP的對映

2、問題
[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server
Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
An error occurred: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
解決:
擁有RMI over SSL的有效金鑰庫,或者禁用了SSL。
1、禁用SSL
jmeter.property裡面 server.rmi.ssl.disable 改為 true,表示禁用

3、問題:
[root@iZ949uw2xehZ bin]# ./jmeter
Java HotSpot™ 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error=‘Cannot allocate memory’ (errno=12)

There is insufficient memory for the Java Runtime Environment to continue.

Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.

An error report file with more information is saved as:

/usr/local/jmeter/apache-jmeter-4.0/bin/hs_err_pid5855.log

解決:
編輯jmeter
搜尋 : “${HEAP:=”-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"
改變初始堆記憶體和最大堆記憶體

4、僅修改 server_port 即可,下面兩者一樣
server.rmi.localport=8899 表示slave server啟動顯示的埠
server_port=8899 表示master機器要遠端連線的埠 即 remote_hosts=xxxx:8899

5、

我們要在多網路卡的伺服器上開啟RMI服務的話必須指定IP,使他們能夠在同一個網段內。

需要以下幾步(假定所有機器都在10.120.11.*網段,agent伺服器為linux,controller伺服器為windows):

1、 修改agent伺服器,指定agent機器的IP
修改jmeter-server檔案

vi jmeter-server

修改RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx(需要連線的IP)

2、修改server伺服器,指定server機器的IP

修改jmeter.bat檔案

新增set rmi_host=-Djava.rmi.server.hostname=10.120.11.214

修改set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%

6、確定在controller機器上安裝jdk,版本和jmeter一致,配置環境變數:Java_home等
在Agent機器上安裝jdk,配置環境變數:Java_home和JMeter_home
安裝目錄不要帶空格,最好都是簡短的英文路徑

7、master機器啟動後會拷貝jmx檔案到slave機器,所以不需要在每臺slave機器上也上傳一份jmx,只需要在master機器上上傳一份jmx指令碼即可。

如果使用csv進行引數化,則需要把引數檔案在每臺slave上拷一份且路徑需要設定成一樣的。

總樣本數 = 執行緒數 * 迴圈次數 * 執行機總數

8、連線失敗原因排查
以下步驟進行排查:

  1. jmeter-server是否啟動;
  2. 是否聯網
  3. ping 伺服器IP是否暢通.
  4. telnet 埠 192.168.3.10 1099
  5. 檢查伺服器的防火牆是否關閉。
  6. 阿里雲安全策略是否正常

9、“could not find ApacheJmeter_core.jar”
解決:在Agent機器安裝jdk,並設定環境變數

10、”Bad call to remote host"
解決:檢查被控制機器上的jmeter-server有沒有啟動,或者remote_hosts的配置是否正確。

相關文章