如果你的JMeter客戶機不能進行屬性,來模擬 足夠的用戶強調您的服務器或在網絡水平是有限的,存在一個選項來控制多個遠程JMeter 引擎從一個JMeter客戶機。 通過運行JMeter遠程,你可以復制 一個測試在許多低端電腦,從而模擬服務器上的負載更大。 一個 JMeter的實例客戶端可以控制任意數量的遠程JMeter實例,並收集 所有的數據。 這提供了以下功能:
- 測試樣品的保存到本地計算機
- 管理多個JMeterEngines從一個機器
- 不需要復制測試計划每個服務器-客戶端發送到服務器
然而,遠程模式並使用更多的資源比獨立運行相同數量的非gui測試。 如果使用了許多服務器實例,客戶機JMeter可以成為重載,因為客戶端網絡連接。 這是提高了切換到剝奪模式(見下文),但你應該經常檢查你的客戶不是超載。
注意,雖然您可以執行JMeterEngine在您的應用程序 服務器,您需要注意這一事實,這將是增加處理 開銷在應用服務器上,因此您的測試結果 有些污染。 推薦的方法是有一個或多個機器上 相同的以太網段配置運行您的應用程序服務器 JMeter引擎。 這將最小化網絡測試的影響 結果而不影響應用程序服務器的性能 本身。
步驟0:配置節點
確保所有節點(客戶機和服務器):
- 運行JMeter的完全相同的版本。
- 所有系統上使用相同的Java版本。 使用不同版本的Java可能工作但不鼓勵。
如果測試使用任何數據文件, 請注意,這些都不是跨由客戶機發送 確保這些在每個服務器上相應的目錄 。 如果有必要你可以定義不同的值通過編輯屬性 user.properties 或 system.properties 在每個服務器上的文件。 這些屬性將會撿起當服務器啟動和可能 測試計划中使用影響其行為(例如,連接到一個不同的遠程服務器)。 或者使用不同的內容所使用的任何數據文件來完成測試 (例如,如果每個服務器必須使用獨特的id,把這些數據文件)之間的
步驟1:啟動服務器
運行JMeter遠程節點,在所有機器上啟動JMeter服務器組件你希望通過運行上運行 的 JMETER_HOME / bin / jmeter-server (unix)或JMETER_HOME / bin / jmeter-server.bat (windows)腳本。
注意,在每個節點上只能有一個JMeter服務器不同,除非使用RMI端口。
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 命令行選項 而不是指定遠程主機(s)使用。 這有同樣的效果 - r 和 -Jremote_hosts = { }一旦 。 如。
jmeter -Rhost1,127.0.0.1,host2
如果您定義JMeter屬性 server.exitaftertest = true 后退出,那么服務器將運行一個測試。 看到也 - x 標志(下面描述)
步驟3:從GUI客戶機啟動JMeter客戶端檢查配置
現在您已經准備好開始控制JMeter客戶機。 微軟視窗系統,啟動客戶端腳本” bin / jmeter.bat ”。 對於UNIX, 使用腳本” bin / jmeter”。 你會注意到Run菜單包含兩個子菜單:“遙控起動”和“遠程停止” (見圖1)。這些菜單包含您在屬性文件中設置客戶端。 使用遠程啟動和停止的 正常的JMeter啟動和停止的菜單項。
步驟3 b:啟動JMeter從非gui客戶機
GUI模式只能用於調試,作為一個更好的選擇,你應該在遠程服務器上啟動測試(s)從非GUI客戶機(命令行)。 命令就是:
jmeter -n -t script.jmx -r
或
jmeter -n -t script.jmx -R server1,server2,…
其他旗幟可能有用:
- -Gproperty =值
- 定義一個屬性在所有服務器(可能出現不止一次)
- - x
- 退出遠程服務器的測試。
第一個例子將開始測試在任何服務器上定義在JMeter屬性 remote_hosts ;
第二個例子將定義 remote_hosts 從服務器列表中,然后開始測試在遠程服務器上。
命令行客戶端將退出當所有的遠程服務器已停止。
手工設置
在某些情況下,jmeter-server腳本可能不會為你工作(如果您正在使用一個操作系統平台沒有預期到的JMeter開發人員)。 下面是如何開始JMeter服務器(步驟1),更多的手動過程:
步驟1:啟動RMI注冊表
JMeter 2.3.1以來,JMeter的RMI注冊表啟動服務器,所以本節不適用在正常的情況下。 回到之前的行為,定義JMeter的財產server.rmi.create = false 在服務器主機系統 遵循下面的說明。
JMeter使用遠程方法調用(RMI)作為遠程通信機制。 因此,您需要 運行RMI注冊應用程序(名為,“ rmiregistry ”)與JDK和位於”本 ” 目錄中。 在運行之前 rmiregistry ,確保以下jar文件在你的系統類路徑:
- JMETER_HOME / lib / ext / ApacheJMeter_core.jar
- JMETER_HOME / lib / jorphan.jar
- JMETER_HOME / lib / logkit-2.0.jar
步驟1 b:啟動JMeter服務器
RMI注冊應用程序運行后,啟動JMeter服務器。 使用“ - s jmeter啟動腳本”選項(“ jmeter - s ”)。
步驟2和3是相同的。
建議
JMeter / RMI需要從客戶端到服務器的連接。 這將使用你選擇端口,默認 1099年 。
JMeter / RMI還需要反向連接,以便從服務器返回的樣本結果給客戶端。
這將使用一個端口。
這個端口通過jmeter屬性可以控制 client.rmi.localport 在 jmeter.properties 。
如果有防火牆或其他網絡過濾器JMeter客戶機和服務器之間, 您將需要確保他們通過設置允許連接。 如果有必要,使用監控軟件展示交通生成。
如果你運行Suse Linux,這些建議可能會有幫助。 默認的安裝可能會啟用防火牆。 在這種情況下, 遠程測試將不會正常工作。 下面的建議被謝爾蓋十了。
如果你看到連接拒絕,打開調試通過以下選項。
rmiregistry -J-Dsun.rmi.log.debug=true \ -J-Dsun.rmi.server.exceptionTrace=true \ -J-Dsun.rmi.loader.logLevel=verbose \ -J-Dsun.rmi.dgc.logLevel=verbose \ -J-Dsun.rmi.transport.logLevel=verbose \ -J-Dsun.rmi.transport.tcp.logLevel=verbose \
JMeter 2.3.1以來,RMI注冊中心服務器啟動的;然而JMeter的選項仍然可以通過命令行。 例如:“ jmeter - s -Dsun.rmi.loader.logLevel =冗長 ”(即省略了 - j 前綴)。 或者可以定義的屬性 system.properties 文件。
解決問題是消除回路 127.0.0.1 和 127.0.0.2 從 設置 。 發生了什么是 jmeter-server 不能連接到rmiregistry如果127.0.0.2 回送是不可用的。 使用以下設置來解決這個問題。
取代
`dirname $0`/jmeter -s "$@"
與
HOST="-Djava.rmi.server.hostname=[computer_name][computer_domain] \ -Djava.security.policy=`dirname $0`/[policy_file]" \ `dirname $0`/jmeter $HOST -s "$@"
還創建一個政策文件和添加 [computer_name][computer_domain] 行 設置 。
為了更好地支持使用RMI通信通道的ssh隧道 遠程測試,因為JMeter 2.6:
- 一個新的屬性” client.rmi.localport “可以設置為控制RemoteSampleListenerImpl使用RMI端口
- 支持SSH隧道的隧道RMI通信遠程端點在本地機器上使用一個端口, 環回接口現在可以使用如果已指定直接使用Java系統屬性 ” java.rmi.server.hostname ”參數。
使用不同的端口
默認情況下,JMeter使用標准RMI端口 1099年 。 可以改變這種情況。 對於這個工作成功, 所有需要同意如下:
- 在服務器上,開始 rmiregistry 使用新的端口號
- 在服務器上,開始JMeter的財產 server_port 定義
- 在客戶端更新 remote_hosts 財產包括新的遠程 主持人:港口 設置
Jmeter 2.1.1以來,jmeter-server腳本改變端口提供支持。 例如,假設您想要使用的端口 1664年 (也許 1099年 已經使用)。
在Windows上(在一個DOS框)C:\JMETER> SET SERVER_PORT=1664 C:\JMETER> JMETER-SERVER [other options]在Unix:
$ SERVER_PORT=1664 jmeter-server [other options](注意: 使用大寫的環境變量)
在這兩種情況下,腳本開始rmiregistry指定端口, 然后開始JMeter在服務器模式,定義了” server_port ”屬性。
選擇端口將登錄服務器 jmeter.log 文件( rmiregistry 不創建一個日志文件)。
使用不同的樣本發送者
聽眾在測試計划將結果發送回客戶端JMeter將結果寫入指定的文件 默認情況下,樣品返回同步生成。 這可能會影響服務器的最大吞吐量測試;樣本結果必須在線程可以發回 繼續下去。 有一些JMeter屬性可以設置為改變這種行為。
- 模式
-
樣品發送模式違約
StrippedBatch 因為2.9。 這應該是在客戶機上設置節點。
- 標准
- 盡快發送樣品同步生成
- 持有
- 數組中保存樣品,直到運行結束。 這可能在服務器上使用了大量的內存,氣餒。
- DiskStore
- (在樣本存儲在磁盤文件 java.io.temp ),直到運行結束。 JVM退出的序列化數據文件被刪除。
- StrippedDiskStore
- 刪除responseData成功的樣本中,並使用DiskStore發送者發送它們。
- 批處理
-
時發送保存樣本計數(
num_sample_threshold )和時間( time_threshold )超過一個閾值, 此時樣品發送同步。 可以在服務器上配置的閾值使用以下屬性:
- num_sample_threshold
- 樣品的數量積累,違約 100年
- time_threshold
- 時間閾值,默認60000毫秒= 60秒
- 統計
-
發送一個總結樣本當數或時間超過一個閾值。 樣品是由線程組名稱和總結樣品標簽。 以下字段是積累:
- 運行時間
- 延遲
- 字節
- 樣品數
- 錯誤數
- 剝奪了
- 刪除responseData從成功中樣本
- StrippedBatch
- 刪除responseData成功的樣本中,並使用批量發送方發送它們。
- 中
- 樣品暫時存儲在一個本地隊列。 一個單獨的工作線程發送樣品。 這允許測試線程繼續沒有等待結果發送回客戶端。 然而,如果樣品正在形成的速度比他們可以發送,隊列最終將填滿, 和取樣器線程將阻塞,直到一些樣品可以從隊列中排水。 這種模式有助於消除峰值在樣本的一代。 隊列的大小可以調節通過設置JMeter的財產 asynch.batch.queue.size (默認 100年 在服務器節點)。
- StrippedAsynch
- 刪除responseData成功的樣本中,並使用異步發送方發送它們。
- 自定義實現
- 模式參數設置為您的自定義樣本發送方類名。 必須實現這個接口 SampleSender 構造函數帶有一個單 類型的參數RemoteSampleListener 。
這並不是一個問題,總有一個更有效的方法來實現這個功能。
適用於以下屬性 批處理 和 統計 模式:
- num_sample_threshold
- 一批的樣品數量(默認 100年 )
- time_threshold
- 等待的毫秒數(默認60秒)
處理節點失敗的開始
為大規模的測試有可能將部分遠程服務器不可用。 例如,當您使用自動化腳本分配許多雲機器和使用它們作為發電機, 要求機器可能會失敗的一些引導因為雲的問題。 因為JMeter 2.13有新的屬性來控制這種行為。
首先你可能希望重試失敗節點的初始化嘗試希望稍微推遲他們的引導。 要啟用重試,你應該設置 client.tries 房地產總數量的連接嘗試。 默認情況下它只有一個嘗試。 控制重試延遲,設置 client.retries_delay 財產 之間的毫秒數睡覺嘗試。
最后,您可能還想要運行的測試與發電機成功初始化和跳過失敗節點。 啟用,設置 client.continue_on_fail = true 財產。