JMeter(十三)分布式部署

Jmeter 是java 應(yīng)用,對于CPU和內(nèi)存的消耗比較大,因此,當(dāng)需要模擬數(shù)以千計的并發(fā)用戶時,使用單臺機(jī)器模擬所有的并發(fā)用戶就有些力不從心,甚至?xí)餔AVA內(nèi)存溢出錯誤。為了讓jmeter工具提供更大的負(fù)載能力,jmeter短小精悍一有了使用多臺機(jī)器同時產(chǎn)生負(fù)載的機(jī)制。

那么,是如何實(shí)現(xiàn)多臺負(fù)載機(jī)同時運(yùn)行的呢?當(dāng)然不會多個人坐在多臺負(fù)載機(jī)面前,一喊開始,大家同時啟動jmeter。這

種方式很笨,也很難達(dá)到真正的同步。其實(shí),我們通過單個jmeter?客戶端就可以控制多個遠(yuǎn)程的jmeter服務(wù)器,使它們同步的對服務(wù)器進(jìn)行壓力測

試。

通過遠(yuǎn)程運(yùn)行jmeter,測試人員可以跨越多臺低端計算機(jī)復(fù)制測試,這樣就可以模擬一個比較大的服務(wù)器壓力,一個jmeter客戶端實(shí)例,理論上可以控制任意多的遠(yuǎn)程jmeter實(shí)例,并通過他們收集測試數(shù)據(jù)。這樣一樣,就有了如下特性:

*???保存測試采樣數(shù)據(jù)到本地機(jī)器

*???通過單臺機(jī)器管理多個jmeter執(zhí)行引擎。

*???沒有必要將測試計劃復(fù)制到每一臺機(jī)器,jmeter?GUI客戶端會將它發(fā)往每一臺jmeter服務(wù)器。

*???每一臺jmeter遠(yuǎn)程服務(wù)器都執(zhí)行相同的測試計劃,jmeter不會在執(zhí)行期間做負(fù)載均衡,每一臺服務(wù)器都會完整地運(yùn)行測試計劃。

在1.4G?Hz~3GHz?的CPU?、1GB?內(nèi)存的?JMeter?客戶端上,可以處理線程?100~300。但是Web?Service?例外。XML處理是?CPU?運(yùn)算密集的,會迅速消耗掉所有的CPU?。一般來說,以XML技術(shù)為核心的應(yīng)用系統(tǒng),其性能將是普通Web?應(yīng)用的?10%~25%?。另外,如果所有負(fù)載由一臺機(jī)器產(chǎn)生,網(wǎng)卡和交換機(jī)端口都可能產(chǎn)生瓶頸,所以一個JMeter?客戶端線程數(shù)不應(yīng)超過?100。

采用JMeter?遠(yuǎn)程模式并不會比獨(dú)立運(yùn)行相同數(shù)目的非GUI?測試更耗費(fèi)資源。但是,如果使用大量的JMeter?遠(yuǎn)程服務(wù)器,可能會導(dǎo)致客戶端過載,或者網(wǎng)絡(luò)連接發(fā)生擁塞。

使用多臺機(jī)器產(chǎn)生負(fù)載的操作步驟如下

(1)在所有期望運(yùn)行jmeter作為?負(fù)載生成器的機(jī)器上安裝jmeter,?并確定其中一臺機(jī)器作為?controller?,其他的的機(jī)器作為agent?。

(2)?運(yùn)行所有?agent?機(jī)器上的jmeter-server?文件(假定使用兩臺機(jī)器192.168.9.99 和192.168.9.130 作為agent)

(3)在controller機(jī)器的jmeter的bin目錄下,找到j(luò)meter.properties?文件,編輯該文件:

查找:

remote_hosts=127.0.0.1

修改為:

remote_hosts=192.168.9.99:1099,192.168.9.130:1099

這里要特別注意端口后,有些資料說明端口1644為jmeter的controller?和agent?之間進(jìn)行通信的默認(rèn)RMI端口號,但是在測試時發(fā)現(xiàn),設(shè)置為1644運(yùn)行不成功,改成1099后運(yùn)行通過。另外還要留意agent的機(jī)子是否開啟了防火墻等。

(4)啟動controller?機(jī)子上的jmeter應(yīng)用jmeter.bat,選擇菜單“運(yùn)行”--->“遠(yuǎn)程啟動”,來分別啟動agent?,也可以直接選擇“遠(yuǎn)程全部啟動”來將所有的agent啟動。

遇到的常見問題

1、在Controller端上控制某臺機(jī)器Run,提示"Bad call to remote host"。

解決方法:檢查被控制機(jī)器上的jmeter-server有沒有啟動,或者JMeter.properties中remote_hosts的配置錯誤。

2、Agent機(jī)器啟動Jmeter_server.bat時,后臺提示:"could not find ApacheJmeter_core.jar"

解決方法:確定在Agent機(jī)器安裝jdk,并設(shè)置環(huán)境變量

3、遠(yuǎn)程啟動時,報錯:

ERROR - jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:

java.net.ConnectException: Connection refused: connect

at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)

at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)

at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)

at sun.rmi.server.UnicastRef.newCall(Unknown Source)

at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)

at java.rmi.Naming.lookup(Unknown Source)

at org.apache.jmeter.engine.ClientJMeterEngine.getEngine(ClientJMeterEngine.java:54)

at org.apache.jmeter.engine.ClientJMeterEngine.(ClientJMeterEngine.java:67)

at org.apache.jmeter.gui.action.RemoteStart.doRemoteInit(RemoteStart.java:180)

at org.apache.jmeter.gui.action.RemoteStart.doAction(RemoteStart.java:80)

at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:81)

這個問題終于被我解決了,其實(shí)原因好簡單呀。只要將本機(jī)的jmter-server.bat執(zhí)行即可。要是在jmeter.properties配置的地方寫了127.0.0.1 的話 就要開本機(jī)的 jmeter-sever.bat. 不寫的話 就不用開了

4、查看1099端口是否被占用

netstat -ano | findstr "1099"

tasklist | findstr "1099"

其它說明:

1、調(diào)度機(jī)(master)和執(zhí)行機(jī)(slave)最好分開,由于master需要發(fā)送信息給slave并且會接收slave回傳回來的測試數(shù)據(jù),所以mater自身會有消耗,所以建議單獨(dú)用一臺機(jī)器作為mater。

2、參數(shù)文件:如果使用csv進(jìn)行參數(shù)化,那么需要把參數(shù)文件在每臺slave上拷一份且路徑需要設(shè)置成一樣的。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容