jmeter分散式部署
Jmeter進行負載測試的 時候,發現使用單臺機器模擬測試超過比如500個程序的併發就有些力不從心或者說不能如實的反應實際情況,在執行的過程中,JMeter自身會自動關閉, 要解決這個問題,則可以使用分散式測試,執行多臺機器執行所謂的 Agent 來分擔 JMeter自身的壓力(這個和LODARUNNER是一樣的道理)
前提條件
JMeter分散式環境,一臺Controller,一到多臺Agent,Controller和Agent可以是同一臺機器。
所有機器,包括Controller和Agent的機器:
1.執行相同版本的JMeter
2.使用相同的java版本
3.有基於SSL的RMI的有效金鑰庫,或者禁用SSL。(本文舉例中是採用的禁用SSL)
4.都在一個網路
5.關閉防火牆
客戶機和伺服器配置
1、在所有期望執行 JMeter 並作為 Load Generator 的機器上安裝 JMeter,並確定其中一臺機器作為 Controller,其他的機器作為 Agent——假定我們使用兩臺機器 192.168.0.1 和 192.168.0.2 作為 Agent;
2、在Controller 機器的 JMeter 安裝目錄下找到 bin 目錄,再找到 JMeter.properties 這個檔案,使用記事本或者其他文字編輯工具開啟它;
3、在開啟的檔案中查詢“remote_hosts=”這個字串,你可以找到這樣一行“remote_hosts=127.0.0.1”。其 中的 127.0..0.1 表示執行 JMeter Agent 的機器,這裡需要修改為“remote_hosts=192.168.0.1:1099,192.168.0.2:1099”——其中的 1099 為 JMeter 的 Controller 和 Agent 之間進行通訊的預設 RMI 埠號; (個人備註:只改要作為Controller的機器上的此檔案即可;Agent的機器上的檔案可以不理會)
4、Agent機子要修改jmeter目錄bin\system.properties 檔案:java.rmi.server.hostname=10.86.16.218 其中10.86.16.218代表Controller機子的IP地址
5、儲存檔案,然後依次啟動作為 Controller的機器上的jmeter-server檔案和作為Agent的機器上的jmeter-server檔案(個人備註:如果是 WINDOWS系統版本的jmeter,則是啟動jmeter-server.bat的批處理檔案,LINUX系統則是jmeter-server檔案, 沒有後綴的,但是要修改為可執行許可權,這後面具體有提到),並重新啟動 Controller 機器上的 JMeter.bat,並進入 Run -> Remote Start 選單項,在這裡可以看到遠端啟動選單下面有192.168.0.1 ,192.168.0.1兩個IP地址
6、如果要讓某個電腦執行,可以點選改電腦的IP地址就可以,如果兩個都要執行,可以點選Run 選單下的“遠端執行全部”選單
7、有時候用作代理的機器太少,仍不能滿足需要,則需要將作為Controller的電腦也當作Agent,則同樣需要修改 JMeter.properties檔案,將Controller的IP地址寫入。同時,這個時候,需要打先開啟Controller 電腦中JMeter下bin目錄下的jmeter-server.bat,然後再開啟JMeter.bat,此時,進入Run -> Remote Start選單,可以看到Controller也作為遠端機器進行執行。 (針對第六點我個人經過實地測試後要進行細化確認:如果是在LINUX下,此檔案的許可權都還是要修改的,且jmeter-server會呼叫名為 jmeter指令碼檔案,其jmeter檔案的許可權也要修改為可執行的才可以,且每個被呼叫的Agent的機器的jmeter-server檔案也是要執行 中才可用呼叫,這點很重要。)。
成功的標誌
-
JMeter Controller的介面上,遠端啟動選單可以看到配置的所有的Agent
3.Agent上jmeter-server.bat啟動的控制檯沒有報錯,顯示測試的開始和結束
請求數分佈
jmeter指令碼配值500個併發,那麼每臺agent都會跑500個,所以配值併發數應該為=需求數/(agent臺數),並且每臺agent的請求都是併發到伺服器的。
異常解決
系統找不到指定的檔案
最近這幾天在做Jmeter大資料分散式安裝與部署的作業,剛開始一切順利,雙擊jmeter.bat視窗順利的彈了出來,可是,當我雙擊jmeter-server.bat時,卻遇到了下圖的錯誤:
我們可以看到jmeter.properties檔案中有一行是這樣的
s e r v e r . r m i . s s l . d i s a b l e = f a l s e
server.rmi.ssl.disable=false
server.rmi.ssl.disable=false
這行說明什麼呢,就是讓我們決定是不是要啟動SSL。很明顯,我的電腦上並沒有這個,所以就不能啟動。把這個改成
s e r v e r . r mi.ssl . d i s a b l e = t r u e
server.rmi.ssl.disable=true
server.rmi.ssl.disable=true
這樣改好了,
察看結果樹中的響應資料項為空白
解決jmeter進行分散式測試,遠端機器來執行指令碼,在察看結果樹中的響應資料項為空白
解決步驟
-
開啟Controller的jmeter--bin目錄下的jmeter.properties檔案
-
查詢到mode=Standard 項
-
將其前邊的註釋去掉,然後儲存重啟jmeter,再次執行遠端機器,就可以看到資料了