1. 程式人生 > 其它 >Request_共享資料(域物件)以及獲取ServletContext

Request_共享資料(域物件)以及獲取ServletContext

一、為什麼要進行分散式部署Jmeter

  對於併發量很大的需求,如上萬併發量,受到CPU和記憶體的限制,單機模擬場景是實現不了的,為了讓JMeter提供更大的負載能力,須使用它的分散式機制,即多臺機器同時產生負載的功能。

  以下引數分析可用於配置負載分佈臺數的參考:通常,4G記憶體最多可達到2000左右的併發量。在1.4G Hz~3GHz 的CPU 、1GB 記憶體的 JMeter 客戶端上,可以處理執行緒 100~300。但是Web Service 例外。XML處理是 CPU 運算密集的,會迅速消耗掉所有的CPU 。一般來說,以XML技術為核心的應用系統,其效能將是普通Web 應用的 10%~25% 。另外,如果所有負載由一臺機器產生,網絡卡和交換機埠都可能產生瓶頸,所以一個JMeter 客戶端執行緒數不應超過 100 。其實我們可以根據這個大概的情況自己除錯一下,比如單機上放一個數量級的併發量 500、1000跑起來看看CPU的使用情況,最佳狀態是CPU佔有率不超過80%。

二、Jmeter分散式執行原理

1、Jmeter分散式測試時,選擇其中一臺作為排程機(master),其它機器做為執行機(slave or Agent)。

2、指令碼在master的GUI開啟,測試計劃僅在master上部署即可,執行時,master GUI會把測試計劃傳送到每臺slave上,slave 拿到指令碼後就開始執行,slave執行時不需要啟動自己的GUI。每一臺jmeter遠端伺服器都執行相同的測試計劃,jmeter不會在執行期間做負載均衡,每一臺伺服器都會完整地執行測試計劃。

3、執行完成後,slave會把結果回傳給master,master會收集所有slave的資訊並彙總。

三、分散式叢集的配置

在部署前請保證各slave機的防火牆處於關閉狀態,master與各臺slave都可以ping通

1、執行機(slave)配置:

  (1)slave機上需要安裝Jmeter和支援當前Jmeter版本的JDK。(有時在執行Jmeter時會提示JDK版本過低)

  (2)新增環境變數:JMETER_HOME路徑為bin目錄的上一級目錄

      

      這樣啟動jmeter-server服務時,就只會看到Found ApacheJMeter_core.jar

  (3)啟動bin目錄下的:jmeter-server.bat(Linux下是jmeter-server),啟動成功如下圖。

      Windows:

        

      Linux:

         

      Linux下啟動jmeter-server有時會報錯,提示“為知的名稱或服務”,如下圖:

       

      解決辦法:

        1、cat /etc/sysconfig/network檢視本機的主機名

        

        2、vi /etc/hosts新增一行本機ip跟主機名對映

        

  (4)上圖上標紅的IP和埠會在master裡配置時用到。IP就是slave機器IP,埠預設是1099,埠也可以自定義,這裡我改成了1000和1100。 

  (5)多臺slave的話,重複1~4步驟就好。

2、排程機(master)配置:

  (1)找到Jmeter的bin目錄下的配置檔案jmeter.properties,修改如下配置:

      remote_hosts=127.0.0.1:1000,192.168.182.130:1200,192.168.182.129:1100(多臺slave之前用 "," 隔開)

  (2)用Jmeter開啟測試指令碼,為了除錯方便,可以為指令碼新增“檢視結果樹”和“聚合報告”。

  (3)開啟Jmeter,選擇執行→遠端啟動,可以依次點選遠端啟動中的slave來執行指令碼,對應的slave命令列視窗上會看到啟動的資訊,全部啟動的話可以選擇遠端全部啟動。遠端停止同理,也可以遠端退出。

      

  每一臺slave都執行相同的測試計劃,就是在master上設定好的測試計劃。

  slave向master回傳資訊時如果請求執行成功了則不回傳具體每個請求的Response資訊,當你用檢視結果樹檢視結果時,只能看到取樣結果是200,而響應資料裡面是空的。

slave控制檯資訊:

四、自定義埠

  1、在slave機的Jmeter的bin目錄下,找到jmeter.properties檔案,修改如下兩個配置項,比如我這裡修改為1200:

      server_port=1200

      server.rmi.localport=1200

  2、啟動slave機上的jmeter-server.bat,如下圖,埠已經修改為:1200

    

  3、修改master機器的jmeter.properties檔案:

    remote_hosts=127.0.0.1:1000,192.168.182.130:1200,192.168.182.129:1100

  4、重啟jmeter.bat,如下圖,埠已經變了

    

五、其它說明

  1、排程機(master)和執行機(slave)最好分開,由於master需要傳送資訊給slave並且會接收slave回傳回來的測試資料,所以mater自身會有消耗,所以建議單獨用一臺機器作為mater。

  2、引數檔案:如果使用csv進行引數化,那麼需要把引數檔案在每臺slave上拷一份且路徑需要設定成一樣的,Filename這裡設定一下(最好放在bin目錄下)。

    

  3、每臺機器上安裝的Jmeter版本和外掛最好都一致,否則會出一些意外的問題。

  4、如果想要master也分擔負載,讓master自身也執行測試計劃,需要把master 的 IP 和 埠也寫到配置檔案裡,在遠端啟動前,也要把master的 jmeter-server.bat執行,這樣master也能和其他slave一起執行測試計劃了。