1. 程式人生 > >JMeter(四)-分散式效能測試

JMeter(四)-分散式效能測試

一:引言

Jmeter 進行併發測試時對於本地負載機的CPU和記憶體的消耗比較大,當需要模擬數以千計的併發使用者時(相當於同時開啟數千計的執行緒),使用單臺機器模擬所有的併發使用者就有些力不從心,甚至會引起JAVA記憶體溢位錯誤。為了讓jmeter提供更大的負載能力,便可以通過jmeter使用多臺機器同時產生負載的機制。
  那麼,是如何實現多臺負載機同時執行的呢?當然不會多個人坐在多臺負載機面前,一喊開始,大家同時啟動jmeter。這種方式很笨,也很難達到真正的同步。其實,我們通過單個jmeter 客戶端就可以控制多個遠端的jmeter伺服器,使它們同步的對被測服務端進行壓力測試。
  
原理圖:

這裡寫圖片描述

通過遠端執行jmeter, 這樣就可以模擬一個比較大的伺服器壓力,一個jmeter客戶端,理論上可以控制任意多的遠端jmeter伺服器,並通過他們收集測試資料。這樣一來,就有了如下特性:
(1) 儲存測試資料到本地機器
(2)通過單臺機器管理多個jmeter執行引擎。
(3)沒有必要將測試計劃複製到每一臺機器,jmeter上,客戶端會將它發往每一臺jmeter伺服器。
(4)每一臺jmeter遠端伺服器都執行相同的測試計劃,每一臺伺服器都會完整地執行測試計劃。

二:操作步驟

在所有期望執行jmete的機器上安裝jmeter(版本必須一致), 並確定其中一臺機器作為 controller ,其他的的機器作為agent

(2)執行所有 agent 機器上的%JMeter_Home%/bin/目錄下jmeter-server.bat 檔案 (假定使用三臺機器ip為192.168.1.101 和192.168.1.102,192.168.1.103 作為agent)
確保controller和agent都在一個子網內。

(3)在controller機器上的%JMeter_Home%/bin/目錄下jmeter.properties 檔案,
查詢:remote_hosts=127.0.0.1
修改為:remote_hosts=192.168.1.101:1099,192.168.1.102:1099,192.168.1.103:1099
這裡要特別注意埠後,有些資料說明埠1644為jmeter的controller 和agent 之間進行通訊的預設RMI埠號,但是在測試時發現,設定為1644執行不成功,改成1099後執行通過。另外還要留意agent的機子是否開啟了防火牆等(必須關掉)。

(4)啟動controller 機器上的%JMeter_Home%/bin/目錄下jmeter.bat,選擇選單“執行”—>“遠端啟動”,來分別啟動agent ,也可以直接選擇“遠端全部啟動”來將所有的agent啟動。

這裡寫圖片描述

這時候,例如我們的測試計劃中要求效能是併發數1200,然後我們有3臺Agent(此時Controller裝置是不執行參與生成併發資料的),那我們寫效能測試指令碼的時候,把併發數寫成1200,Controller會自動分配效能壓力,每一個Agent上都執行相同併發數。

假如需要將Controller裝置也當作Agent來參與生成併發資料,也就是說有一臺裝置需要兼任Controller和Agent。這種情況,需要修改JMeter.properties檔案,將Controller的IP地址寫入。然後,需要打先開啟Controller的%JMeter_HOME%/bin目錄下的jmeter-server.bat,然後再開啟JMeter.bat,此時,進入Run->Remote Start選單,可以看到Controller也作為遠端機器進行執行。