1. 程式人生 > >Jmeter分散式壓力測試

Jmeter分散式壓力測試

安裝

安裝前提(因為jmeter依賴於java所以必須先配置好java

下載後解壓:

 tar -xvzf apache-jmeter-3.1.tgz

Jmeter引數

-h, --help

                print usage information and exit

#列印幫助資訊 

        -v, --version

                print the version information and exit

          #列印版本資訊

        -p, --propfile {argument}

                the jmeter property file to use

          #執行時指定property檔案,預設是使用JMETER_HOME/bin目錄下的jmeter.properties,如果使用者自定義有其它的配置,在這裡加上

          #用法如下: -p user.properties

        -q, --addprop {argument}

                additional property file(s)

          #其它配置檔案,如JVM引數等等

        -t, --testfile {argument}

                the jmeter test(.jmx) file to run

          #要執行的jmeter指令碼

        -j, --jmeterlogfile {argument}

                the jmeter log file

          #指定記錄jmeter log的檔案,預設為jmeter.log

        -l, --logfile {argument}

                the file to log samples to

          #記錄取樣器Log的檔案

        -n, --nongui

                run JMeter in nongui mode

          #以nongui模式執行jmeter

        -s, --server

                run the JMeter server

          #執行JMeter server

        -H, --proxyHost {argument}

                Set a proxy server for JMeter to use

          #代理伺服器地址

        -P, --proxyPort {argument}

                Set proxy server port for JMeter to use

          #代理伺服器埠

        -u, --username {argument}

                Set username for proxy server that JMeter is to use

          #代理伺服器的使用者名稱

        -a, --password {argument}

                Set password for proxy server that JMeter is to use

          #代理伺服器使用者名稱對應的密碼

        -J, --jmeterproperty {argument}={value}

                Define additional JMeter properties

          #定義額外的Jmeter屬性

        -G, --globalproperty (argument)[=(value)]

                Define Global properties (sent to servers)

                e.g. -Gport=123

                 or -Gglobal.properties

          #定義傳送給server的全域性屬性

         #如:-Gport=123 或者-Gglobal.properties(指定監聽server的埠)

        -D, --systemproperty {argument}={value}

                Define additional System properties

          #定義系統屬性

        -S, --systemPropertyFile {filename}

                a property file to be added as System properties

#通過指定的property檔案定義系統屬性

        -L, --loglevel {argument}={value}

                Define loglevel: [category=]level 

                e.g. jorphan=INFO or jmeter.util=DEBUG

          #定義日誌等級

        -r, --runremote (non-GUI only)

                Start remote servers (as defined by the jmeter property remote_hosts)

          #啟動遠端server(在jmeter property中定義好的remote_hosts),公在non-gui模式下此引數才生效

        -R, --remotestart  server1,... (non-GUI only)

                Start these remote servers (overrides remote_hosts)

          #啟動遠端server(如果使用此引數,將會忽略jmeter property中定義的remote_hosts)

        -d, --homedir {argument}

                the jmeter home directory to use

                #Jmeter執行的主目錄

        -X, --remoteexit

                Exit the remote servers at end of test (non-GUI)

          #測試結束時,退出(在non-gui模式下)


 配置jmeter client & server

瞭解了上面的各個引數後,開始配置分散式測試

先看一下官方文件是怎麼說的,中文為我新增的註釋:

1. the firewalls on the systems are turned off.#1.關閉防火牆

2. all the clients are on the same subnet.#2.所有的客戶端都在同一個子網內

3. the server is in the same subnet, if 192.x.x.x or 10.x.x.x ip addresses are used. If the server

doesn't use 192 or 10 ip address, there shouldn'

t be any problems.#3.server也必須在同一子網內如果使用192.x.x.x或者10.x.x.x這樣的IP地址,如果server沒有使用192或者10這樣的IP地址,(server同client不在同一子網內)將不會有任何問題

4. Make sure JMeter can access the server.#4.確保Jmeter可以訪問到server

5. Make sure you use the same version of JMeter on all the systems. Mixing versions may not work

correctly.#5.確保各系統的Jmeter版本保持一致,不同版本的Jmeter將不能很好的工作

一些術語的解釋:

· master,以GUI模式執行,同時控制測試的執行,在這裡就是client,啟動指令碼所在的那臺機器。

· slave,執行jmeter-server並從master接收指令、向目標伺服器傳送請求

設定jmeter-server:

用文字編輯器開啟JMETER_HOME/bin目錄下的jmeter.properties檔案,新增執行jmeter-server的主機IPremote-hosts

remote_hosts=10.0.0.158, 10.0.0.140,localhost

如果你不希望你的客戶端也作為jmeter-server執行的話,把localhost從上面的配置中移除。

這裡要注意:建議不用localhost而是使用實際的IP,否則容易報錯。

實戰階段:

一、在客戶端以gui模式啟動jmeter,然後開啟或者建立一個測試指令碼


二、從gui模式啟動所有的遠端server,方法:執行-遠端全部啟動,看下圖,也可以單獨啟動某一個jmeter-server


三、使用no-gui方式進行壓力測試

jmeter -t "JMS Point-to-Point.jmx" -n -l testresult.csv -r
-t:從哪個jmx啟動

-n:以no-gui的方式進行壓力測試

-l:記錄log

-r:啟動遠端server(在jmeter property中定義好的remote_hosts),公在non-gui模式下此引數才生效

至此,以經通過non-gui模式執行Jmeter分散式測試了

這裡有一點小貼士:以分散式執行Jmeter,是在所有的server上運行同樣的測試指令碼,也就是說,如果你打算1s起100個執行緒,如果你用5臺機器進行分散式測試,那麼將指令碼除錯至1s起20個執行緒,否則則是1s起了500個執行緒,這樣可能跟你的預期有所差別