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'
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的主機IP到remote-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個執行緒,這樣可能跟你的預期有所差別