Jmeter分布式壓測實戰及踩坑處理(含參數化)


  項目中使用Jmeter進行大並發壓測時,單機受限內存、CPU、網絡IO,會出現服務器壓力還沒有上

去,但壓測服務器由於模擬的壓力太大死機的情況。JMeter的集群模式可以讓我們將多台機器聯合起來

一起產生負載,從而彌補單台機器負載生成能力不足的問題。

分布式壓測原理

1、控制機為Master,負載機為Slave

2、Master啟動后,會拷貝jmx腳本文件到所有的Slave上

3、Slave會回傳壓測數據給Master,最后由Master匯總出結果文件

 注意事項

1、腳本文件上傳到master即可,不用所有的slave都傳一份

2、所有機器最好在同一個網段

3、由於master需要發送信息給slave並接收slave回傳回來的測試數據,自身會有一定的消耗,建議單獨

配置一台機器作為master

4、所有機器的jmeter版本和插件版本要一致

5、如果jmeter版本在4.0以上,需在jmeter.properties中設置 server.rmi.ssl.disable=true 

分布式環境配置

Slaves機器配置

  編輯所有slave機器jmeter/bin目錄下的jmeter.properties文件,slaves機器上remote_hosts不動,根

據需要修改服務端口。默認端口為1099,可以修改為任意未被占用的端口。我這里默認端口沒有被占用,

就不做修改。

# Remote Hosts - comma delimited
remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010

# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099

Master機器配置

  編輯master機器jmeter/bin目錄下的jmeter.properties文件,將所有slave機器的地址配置到文件中,

server_port不用修改。

# Remote Hosts - comma delimited
remote_hosts=166.188.20.86,166.188.21.75(slave機器的ip和端口)
#remote_hosts=localhost:1099,localhost:2010

# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099

  master機器也可以作為負載機,在remote_hosts中加上127.0.0.1即可,但考慮到自身消耗,這里

不使用。如果修改了負載機的端口號,則需帶上修改后的端口號,我這里使用的默認值,不用再單獨

標注。修改了端口號使用如下配置:

# Remote Hosts - comma delimited
remote_hosts=166.188.20.86:2099,166.188.21.75:2099
#remote_hosts=localhost:1099,localhost:2010

# RMI port to be used by the server (must start rmiregistry with same port)
server_port=2099

 參數化文件配置

  參數化文件的路徑要保持一致,我這里配置在jmeter/bin目錄下。注意:所有的slave機器都要上傳一

份參數化文件

分布式壓測執行

Slave機器執行

  在所有的slave機器上執行 ./jmeter-server 命令,出現以下界面為執行成功。

Master機器執行

  確認好所有slave機器都正確啟動后,在master機器上執行命令

 jmeter -n -t stress0804.jmx -r -l testResult.jtl 

  命令解析:

  • n 非GUI模式運行
  • t 要運行的jmx文件
  • r 將遠程所有的agent啟動
  • l 生成結果文件

  執行結果:

  腳本中設置了5個線程,有2台負載機,所有Active為5*2=10個,運行時間2分鍾。

常見問題處理

問題一

[test@localhost bin]$ ./jmeter-server 
Writing log file to: /home/test/jmeter/apache-jmeter-3.1/bin/jmeter-server.log
Created remote object: UnicastServerRef [liveRef: [endpoint:[127.0.0.1:37863](local),objID:[-3217392f:17b104e6552:-7fff, 742049333908920389]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.

解決方法:執行命令中指定本地IP ./jmeter-server -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx 

問題二

[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[:39308](local),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

[root@iZwz95j86y235aroi85ht0Z bin]# vi /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的映射

問題三

[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)

解決方法:編輯jmeter.properties文件,將server.rmi.ssl.disable的值改為true

問題四

  slave機器無法啟動或者沒有返回執行數據

解決方法:

  1、檢查master機器和slave機器能否ping通

  2、檢查防火牆

  3、檢查master機器和slave機器的服務器時間是否一致


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM