通過遠程運行JMeter,您可以跨多臺低端計算機複製測試,從而模擬服務器上的更大負載。JMeter客戶端的一個實例可以控制任意數量的遠程JMeter實例,並從中收集所有數據。
將測試樣本保存到本地機器
從一臺機器管理多個JMeter服務
無需將測試計劃複製到每個服務器 - 客戶端將其發送到所有jmete服務器進行測試
注意:所有服務器都運行相同的測試計劃。JMeter不會在服務器之間分配負載,每個都運行完整的測試計劃。因此,如果您設置1000個線程並擁有6個JMeter服務器,則最終會注入6000個線程。
分佈式測試有一些基本的限制。
沒有代理服務器,RMI無法通過子網進行通信; 因此JMeter也無法使用代理。
從版本2.9開始,JMeter會將所有測試結果剝離響應數據到控制檯,這樣可以減少對網絡IO的影響。確保您監控您的網絡流量,以免流量造成爭用。
運行在2-3 GHz CPU(最新CPU)上的單個JMeter客戶端可以處理1000-2000個線程,但具體還取決於測試類型:http、ftp。
分佈測試原理圖:
配置節點
確保所有節點(客戶端和服務器):
1、正在運行完全相同的JMeter版本。
2、在所有系統上使用相同版本的Java。使用不同版本的Java可能會工作但不鼓勵。
3、擁有RMI over SSL的有效密鑰庫,或者禁用了SSL。
設置SSL
自JMeter 4.0以來,RMI的默認傳輸機制將使用SSL。SSL需要密鑰和證書才能工作。不使用ssl將存在安全漏洞。
Windows系統(稱爲bin / create-rmi-keystore.bat)
Unix系統(稱爲bin / create-rmi-keystore.sh)。
執行上述腳本將生產密鑰,該密鑰有效期爲七天,默認密碼值爲’ changeit ’
例如設置時候:
$ cd jmeter/bin
$ ./create-rmi-keystore.sh
What is your first and last name?
[Unknown]: rmi
What is the name of your organizational unit?
[Unknown]: My unit name
What is the name of your organization?
[Unknown]: My organisation name
What is the name of your City or Locality?
[Unknown]: Your City
What is the name of your State or Province?
[Unknown]: Your State
What is the two-letter country code for this unit?
[Unknown]: XY
Is CN=rmi, OU=My unit name, O=My organisation name, L=Your City, ST=Your State, C=XY correct?
[no]: yes
Copy the generated rmi_keystore.jks to jmeter/bin folder or reference it in property 'server.rmi.ssl.keystore.file'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
然後複製generated rmi_keystore.jks到bin目錄然後在jmeter.propertis中設置
server.rmi.ssl.keystore.file=generated rmi_keystore.jks //引用該SSL密鑰
對進行分佈測試所有jmeter服務機器,都需要通過進行項目配置。生成一個密鑰後,複製到其他jmeter 客戶機、服務機進行相應配置。
JMeter / RMI需要從客戶端到服務器的連接。這將使用您選擇的端口,默認值爲1099。
JMeter / RMI還需要反向連接才能將服務器的樣本結果返回給客戶端。
這將使用高編號的端口。
此端口可以通過稱爲JMeter的屬性來控制client.rmi.localport在jmeter.properties。
如果JMeter客戶端和服務器之間有任何防火牆或其他網絡過濾器,則需要確保它們已設置爲允許通過連接。如有必要,請使用監控軟件來顯示正在生成的流量。
第1步:啓動服務器
要在遠程節點中運行JMeter,通過運行JMETER_HOME / bin / jmeter-server(unix)或JMETER_HOME / bin / jmeter-server.bat(windows)腳本,在希望運行的所有機器上啓動JMeter服務器組件。
請注意,除非使用不同的RMI端口,否則每個節點上只能有一個JMeter服務器。
從JMeter 2.3.1開始,JMeter服務器應用程序自己啓動RMI註冊表; 沒有必要單獨啓動RMI註冊表。要恢復到以前的行爲,請定義JMeter屬性
server.rmi.create = FALSE
在服務器主機系統上。
默認情況下,RMI爲JMeter服務器引擎使用動態端口。這可能會導致防火牆出現問題,因此您可以定義JMeter屬性server.rmi.localport 來控制此端口號。如果這不是零,它將被用作服務器引擎的本地端口號。
第2步:將服務器IP添加到客戶端的“屬性文件”中
在控制的JMeter機器上編輯屬性文件。在JMETER_HOME / bin / jmeter.properties中,找到名爲“ remote_hosts ” 的屬性,並添加正在運行的JMeter服務器IP地址的值。可以添加多個這樣的服務器,逗號分隔。
請注意,您可以使用-R 命令行選項 來指定要使用的遠程主機。這與使用-r和-Jremote_hosts = {serverlist}具有相同的效果。例如
jmeter -Rhost1,127.0.0.1,host2
如果您定義了JMeter屬性server.exitaftertest = true,那麼服務器將在運行單個測試後退出。
也可以通過客戶端遠程啓動測試命令屬性 -X 將在運行單個測試後退出。
步驟3a:從GUI客戶端啓動JMeter客戶端以檢查配置
現在您已準備好啓動控制的JMeter客戶端。對於MS-Windows,使用腳本“ bin / jmeter.bat ” 啓動客戶端。對於UNIX,使用腳本“ bin / jmeter ”。您會注意到Run菜單包含兩個新的子菜單:“Remote Start”和“Remote Stop”(見圖1)。這些菜單包含您在屬性文件中設置的客戶端。使用遠程啓動和停止,而不是普通的JMeter啓動和停止菜單項。
步驟3b:從非GUI客戶端啓動JMeter
GUI模式只能用於調試,作爲更好的選擇,您應該從非GUI(命令行)客戶端開始在遠程服務器上進行測試。執行此操作的命令是: