Windows和Linux的Jmeter分散式叢集壓力測試
Windows的Jmeter分散式叢集壓力測試
在使用Jmeter進行效能測試時,如果併發數比較大(比如最近專案需要支援1000併發),單臺電腦的配置(CPU和記憶體)可能無法支援,這時可以使用Jmeter提供的分散式測試的功能。
一、Jmeter分散式執行原理:
1、Jmeter分散式測試時,選擇其中一臺作為排程機(master),其它機器做為執行機(slave)。
2、執行時,master會把指令碼傳送到每臺slave上,slave 拿到指令碼後就開始執行,slave執行時不需要啟動GUI,我理解它應該是通過命令列模式執行的。
3、執行完成後,slave會把結果回傳給master,master會收集所有slave的資訊並彙總。
二、執行機(slave)配置:
1、slave機上需要安裝Jmeter,具體如何安裝這裡不詳細介紹了。
2、新增環境變數:JMETER_HOME=D:\B_TOOLS\apache-jmeter-2.13,此處為你Jmeter的路徑
3、啟動bin目錄下的:jmeter-server.bat,啟動成功如下圖:
4、上圖上標紅的IP和埠會在master裡配置時用到。IP就是slave機器IP,埠預設是1099,埠也可以自定義,這裡我自定義為1000,這個後面會講。
5、多臺slave的話,重複1~4步驟就好。
三、排程機(master)配置:
1、指令碼:簡單的一個訪問百度的指令碼:
2、找到Jmeter的bin目錄下jmeter.properties
remote_hosts=10.13.223.202:1000,10.13.225.12:1000
多臺slave之前用","隔開,我這配置了2臺,可以看到標紅的這個就是上面截圖slave的IP和Port.
3、開啟Jmeter,選擇執行,有運程啟動、運程全部啟動兩個選項:
4、選擇遠端啟動-->10.13.225.12:1000
a) master結果,這裡我只啟動了10.13.225.12:1000這一臺slave,所以只有一個結果(執行緒數和迴圈次數都是1):
b) slave控制檯資訊:
5、選擇遠端啟動-->遠端全部啟動:
a) master結果,全部啟動,我配置了2臺slave,所以有兩次執行結果:
四、自定義埠:
上面其實已經實現了Jmeter的分散式測試,這部分主要介紹下如何自定義slave埠:
1、slave:在slave機的Jmeter的bin目錄下,找到jmeter.properties檔案,修改如下兩個配置項,比如我這裡修改為1888:
server_port=1888
server.rmi.localport=1888
2、啟動slave機上的jmeter-server.bat,如下圖,埠已經修改為:1888
3、master:修改master機器的jmeter.properties檔案:
remote_hosts=10.13.223.202:1000,10.13.225.12:1888
4、重啟jmeter.bat,如下圖,埠已經變了:
五、其它說明:
1、排程機(master)和執行機(slave)最好分開,由於master需要傳送資訊給slave並且會接收slave回傳回來的測試資料,所以mater自身會有消耗,所以建議單獨用一臺機器作為mater。
2、引數檔案:如果使用csv進行引數化,那麼需要把引數檔案在每臺slave上拷一份且路徑需要設定成一樣的。
3、每臺機器上安裝的Jmeter版本和外掛最好都一致,否則會出一些意外的問題。
Linux的Jmeter分散式叢集壓力測試
1.前言
對於運維工程師來說,需要對自己維護的伺服器效能瓶頸瞭如指掌,比如我當前的架構每秒併發是多少,我伺服器最大能接受的併發是多少,是什麼導致我的效能有問題;如果當前架構快達到效能瓶頸了,是橫向擴容效能提升大,還是縱向擴容效能提升大。
如果需要了解這些資訊,需要在兩方面下功夫,一個是對伺服器進行效能測試,一個是對伺服器進行效能監控。
通過對伺服器進行效能測試:我們可以瞭解到當前架構的效能瓶頸,還可以對架構橫向擴容和縱向擴容來進行測試,對後期的架構擴容提供資料參考。
通過對伺服器進行效能監控:我們可以瞭解當前伺服器的CPU、記憶體、IO等資源是否耗盡,我們可以在監控系統新增觸發器,一旦伺服器資源在快要達到瓶頸的時候,我們可以觸發一個報警讓運維人員來處理,也可以觸發一個讓架構進行自動化擴容(如果是雲平臺,直接呼叫api建立主機,ansible部署應用和程式)
本文將介紹下,我在工作中使用jmeter測試效能瓶頸的一些實踐。本文做效能測試適用於移動網際網路架構,非移動網際網路架構有其他更好的測試方法。
2.Jmeter分散式壓測介紹
在工作中使用jmeter做大併發壓力測試的場景下,單機受限記憶體、CPU、網路IO,會出現伺服器壓力還沒有上去,但是壓測伺服器已經由於模擬的壓力太大宕機了。為了讓jmeter工具提供更強大的負載能力,jmeter提供了多臺機器同時產生負載的機制,下面是架構圖。
原理:比如我在jmeter server配置執行緒數為10,迴圈次數為100,也就是會對測試伺服器發起1000次請求,我有3臺agent伺服器,如果我在server端選擇遠端啟動壓力測試,那麼每臺agent都會對測試伺服器發起10*100次請求,那麼這次壓力測試產生的請求就是10*100*3=3000次。
如果對原理不是很明白,看完下面的操作之後就會理解了。
3.Jmeter分散式壓測環境搭建
3.1.搭建前說明
伺服器環境說明:做效能測試可以直接在在雲平臺按需購買壓力機,一旦測試結束釋放壓力機即可。
分散式環境壓力伺服器要求:
- 需要server(控制機)和agent(壓力機),agent搭建在linux(centos 6.5)伺服器環境下,server搭建在windows(server 2012)環境下。
- 壓力測試瓶頸大都在頻寬上面,需要保證壓力機的頻寬要比伺服器的頻寬高,不然壓力上不去。
- 需要保證agent和server都在一個網路中,且在多網絡卡環境需要保證啟動的網絡卡都在一個網段。
- 需要保證server和agent之間的時間同步。
- 關閉防火牆。
3.2.Windows部署jmeter
(1)部署jdk環境,配置path變數,安裝完成效果如下
(2)直接去官網下載最新的二進位制原始碼包即可。
(3)解壓jmeter到指定目錄,設定path變數,安裝完成之後,在命令列執行jmeter命令,如果可以正常啟動jmeter,說明環境配置ok。
3.3.Linux部署jmeter
(1)下載安裝
1234 | wget http: //mirrors .tuna.tsinghua.edu.cn /apache//jmeter/binaries/apache-jmeter-3 .1.zip unzip apache-jmeter-3.1.zip -d /usr/local/ cd /usr/local/ ln -s apache-jmeter-3.1/ jmeter |
(2)配置啟動指令碼
1234567891011121314151617181920212223242526272829 | #!/bin/bash # chkconfig: 345 26 74 # description: jmeter agent myip=` ifconfig eth0 | awk '/inet addr/{gsub(/addr:/,"");print $2}' ` cmd= "/usr/local/jmeter/bin/jmeter-server -Djava.rmi.server.hostname=$myip" start(){ $cmd & } stop(){ jmeter_pid=` ps aux | grep jmeter-server | grep - v grep | awk '{print $2}' ` for pid in $jmeter_pid; do kill -9 $pid done } act=$1 case $act in 'start' ) start;; 'stop' ) stop;; 'restart' ) stop
|