Jmeter之分布式測(cè)試

Jmeter之分布式測(cè)試

2017年10月27日 15:20:57


由于(1)Jmeter 是純java 應(yīng)用疾宏,對(duì)于CPU和內(nèi)存的消耗比較大,并且受到JVM的一些限制;?

??一般情況下,依據(jù)機(jī)器配置骄蝇,單機(jī)的發(fā)壓量為300~600,因此操骡,當(dāng)需要模擬數(shù)以千計(jì)的并發(fā)用戶時(shí)九火,使用單臺(tái)機(jī)器模擬所有的并發(fā)用戶就容易卡死赚窃,引起JAVA內(nèi)存溢出錯(cuò)誤;(在1.4GHz~3GHz的CPU岔激、1GB內(nèi)存的JMeter客戶端上勒极,可以處理線程100~300。但是WebService例外虑鼎。XML處理是CPU運(yùn)算密集的辱匿,會(huì)迅速消耗掉所有的CPU。一般來(lái)說(shuō)炫彩,以XML技術(shù)為核心的應(yīng)用系統(tǒng)匾七,其性能將是普通Web應(yīng)用的10%~25%。)

(2)單臺(tái)機(jī)器模擬的時(shí)候江兢,如果并發(fā)數(shù)量較多且發(fā)送的網(wǎng)絡(luò)包較大時(shí)昨忆,單機(jī)的網(wǎng)絡(luò)帶寬就會(huì)成為測(cè)試瓶頸,無(wú)法真正模擬高并發(fā)杉允,導(dǎo)致測(cè)試結(jié)果失真(例如在要一秒內(nèi)發(fā)送3000個(gè)請(qǐng)求邑贴,合計(jì)512kb,但是測(cè)試電腦只有256的上傳帶寬叔磷,那么實(shí)際測(cè)試的時(shí)候只是模擬了在一秒內(nèi)發(fā)送1500個(gè)請(qǐng)求(256kb)的場(chǎng)景拢驾,導(dǎo)致測(cè)試結(jié)果失真。下載帶寬的影響也是類(lèi)似的)改基;即:如果所有負(fù)載由一臺(tái)機(jī)器產(chǎn)生繁疤,網(wǎng)卡和交換機(jī)端口都可能產(chǎn)生瓶頸,所以一個(gè)JMeter客戶端線程數(shù)不應(yīng)超過(guò)100寥裂。

(以上是測(cè)試機(jī)器的分析;應(yīng)該還有別的案疲,如硬盤(pán)等)

(3)真正的業(yè)務(wù)場(chǎng)景并發(fā)封恰,我覺(jué)得應(yīng)該是用戶數(shù)大,每個(gè)用戶的請(qǐng)求數(shù)小褐啡。如:更可能是1000個(gè)用戶在2秒內(nèi)各發(fā)起2個(gè)請(qǐng)求诺舔,而不是200個(gè)用戶在2秒內(nèi)各發(fā)起10個(gè)請(qǐng)求,雖然總的請(qǐng)求數(shù)都是2000個(gè)备畦。


? 為避免以上問(wèn)題低飒,更合理地進(jìn)行性能測(cè)試,我們可以使用Jmeter提供的分布式測(cè)試功能懂盐。

Jmeter分布式執(zhí)行原理:

  1褥赊、Jmeter分布式測(cè)試時(shí),選擇其中一臺(tái)作為調(diào)度機(jī)(master/Controller)莉恼,其它機(jī)器做為執(zhí)行機(jī)(slave/Agent)拌喉。

  2速那、執(zhí)行時(shí),master會(huì)把腳本發(fā)送到每臺(tái)slave上尿背,slave 拿到腳本后就開(kāi)始執(zhí)行端仰,slave執(zhí)行時(shí)不需要啟動(dòng)GUI,應(yīng)該是通過(guò)命令行模式執(zhí)行的田藐。

  3荔烧、執(zhí)行完成后,slave會(huì)把結(jié)果回傳給master汽久,master會(huì)收集所有slave的信息并匯總鹤竭。

如下圖所示:

???????????????此圖取自http://www.cnblogs.com/fengpingfan/p/5583954.html

注意:

(1)每一臺(tái)jmeter遠(yuǎn)程服務(wù)器(slave機(jī)器)都執(zhí)行相同的測(cè)試計(jì)劃,jmeter不會(huì)在執(zhí)行期間做負(fù)載均衡回窘,每一臺(tái)服務(wù)器都會(huì)完整地運(yùn)行測(cè)試計(jì)劃诺擅;

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

(3)默認(rèn)情況下撮执,master機(jī)器是不執(zhí)行參與生成并發(fā)數(shù)據(jù)的;

(4)調(diào)度機(jī)(master)和執(zhí)行機(jī)(slave)最好分開(kāi)舷丹,由于master需要發(fā)送信息給slave并且會(huì)接收slave回傳回來(lái)的測(cè)試數(shù)據(jù)抒钱,所以mater自身會(huì)有消耗,所以建議單獨(dú)用一臺(tái)機(jī)器作為mater颜凯。

分布式測(cè)試操作步驟:

1谋币、準(zhǔn)備多個(gè)測(cè)試電腦(m1、s1症概、s2蕾额、s3, master彼城、slave)诅蝶,并都安裝1.7以上版本jdk,配置環(huán)境變量募壕;

2调炬、將m1使用的Jmeter打包發(fā)到c1、c2舱馅、c3電腦缰泡,并于在相同路徑下安裝。這樣就保證了Jmeter版本一致代嗤,額外下載安裝的插件一致匀谣。如果要用到csv作為數(shù)據(jù)源照棋,那么強(qiáng)烈建議將csv文件放到bin\examples等文件夾下,這樣在slave機(jī)上才能正確讀取-因?yàn)榘惭b路徑一致所以csv路徑也就一致了武翎;

3烈炭、設(shè)置并啟動(dòng)slave機(jī)器

(1)分別在s1、s2宝恶、s3(slave機(jī)器)上符隙,進(jìn)入%JMETER HOME%/bin/目錄,

打開(kāi)“jmeter.properties”垫毙,配置執(zhí)行機(jī)遠(yuǎn)程啟動(dòng)端口(默認(rèn)為 1099)霹疫,

如改為:

server_port=1029

server.rmi.localport=1029

(2)運(yùn)行JMeter-server.bat(windows系統(tǒng))/jmeter-server.sh (linux)來(lái)啟動(dòng)slave機(jī)器的Jmeter,正常啟動(dòng)后會(huì)彈出命令行窗口综芥,提示"created remote object"丽蝎;

注:我這被坑了,如上截圖(我沒(méi)有改端口膀藐,使用默認(rèn)的)屠阻,ip后面有一個(gè)冒號(hào),跟著一串?dāng)?shù)字61470额各,我開(kāi)始以為有這么奇怪的端口號(hào)国觉,把這個(gè)配到master機(jī)中,發(fā)現(xiàn)啟動(dòng)不了虾啦,所以slave機(jī)器的端口號(hào)要在“jmeter.properties”中查看麻诀、配置;

4傲醉、配置蝇闭、啟動(dòng)master機(jī)器

(1)在m1(master機(jī)器)的%JMETER HOME%/bin/目錄,找到 JMeter.properties 這個(gè)文件硬毕,使用notepad++或記事本等工具打開(kāi)呻引。

(2)在打開(kāi)的文件中查找“remote_hosts”,你會(huì)找到“remote_hosts=127.0.0.1”昭殉。

127.0.0.1指本機(jī)苞七,表示本機(jī)也可作為JMeter Agent運(yùn)行的機(jī)器藐守。

??這里需要將slave機(jī)器的IP及端口號(hào)以追加的形式填入挪丢,使用逗號(hào)分隔,末尾不用加標(biāo)點(diǎn)符號(hào)卢厂,如“remote_hosts=192.168.88.180:1099,192.168.88.218:1099”乾蓬;

其中的 1099 為 JMeter 的 Controller 和 Agent 之間進(jìn)行通訊的默認(rèn) RMI 端口號(hào);

? ?(引申閱讀:從JMeter 2.3.1開(kāi)始慎恒,JMeter遠(yuǎn)程服務(wù)器會(huì)自己?jiǎn)?dòng)RMI注冊(cè)任内;用戶沒(méi)有必要單獨(dú)啟動(dòng)RMI注冊(cè)撵渡。假設(shè)測(cè)試人員一定要單獨(dú)啟動(dòng)RMI注冊(cè),可以在遠(yuǎn)程節(jié)點(diǎn)上定義JMeter屬性server.rmi.create=false死嗦。

???默認(rèn)情況下趋距,JMeter遠(yuǎn)程服務(wù)器的RMI使用動(dòng)態(tài)端口號(hào)。這樣就會(huì)為防火墻配置帶來(lái)麻煩越除,因此JMeter 2.3.2及其以后的版本节腐,會(huì)檢查JMeter屬性server.rmi.localport。如果該值非零摘盆,JMeter遠(yuǎn)程服務(wù)器就會(huì)用它來(lái)作為本地端口號(hào)翼雀。)

(3)保存文件,然后運(yùn)行m1上Jmeter.bat孩擂,啟動(dòng)gui界面狼渊,并進(jìn)入 Run -> Remote Start 菜單項(xiàng),在這里可以看到遠(yuǎn)程啟動(dòng)菜單下面有剛剛添加的兩個(gè)slave機(jī)器的ip地址

在這里类垦,我們可分別啟動(dòng)點(diǎn)擊ip地址啟動(dòng)對(duì)應(yīng)的slave機(jī)器狈邑,也可以直接選擇“遠(yuǎn)程全部啟動(dòng)”來(lái)將所有的slave啟動(dòng)。

(4)有時(shí)候用作slave的機(jī)器太少护锤,仍不能滿足需要官地,則需要將作為master的電腦也當(dāng)作slave,則同樣需要修改 JMeter.properties文件烙懦,將master的IP驱入、端口寫(xiě)入。

類(lèi)似其他slave機(jī)器氯析,需要先啟動(dòng)機(jī)器的jmeter-server.bat亏较,然后再打開(kāi)JMeter.bat,進(jìn)入Run -> Remote Start菜單掩缓,可以看到master機(jī)器也作為遠(yuǎn)程機(jī)器了雪情。

5、驗(yàn)證分布式測(cè)試是否成功

為了便于驗(yàn)證你辣,我先設(shè)置一個(gè)線程巡通,發(fā)送一個(gè)請(qǐng)求;

(1)我只啟動(dòng)一臺(tái)192.168.88.180這臺(tái)slave機(jī)舍哄,

察看結(jié)果樹(shù)宴凉,可知,只發(fā)送了一次請(qǐng)求表悬,且master機(jī)器沒(méi)有收集通過(guò)了斷言的請(qǐng)求弥锄;

在slave機(jī)器的控制臺(tái)也輸出了被調(diào)用命令

(2)我啟動(dòng)所有slave機(jī)器(我這里設(shè)置了兩臺(tái)),

察看結(jié)果樹(shù)可知,兩臺(tái)slave機(jī)器都各發(fā)送了一次請(qǐng)求籽暇,并且master機(jī)器收集沒(méi)有通過(guò)了斷言的請(qǐng)求響應(yīng)信息温治;

請(qǐng)求數(shù)計(jì)算

總樣本數(shù) = 線程數(shù) * 循環(huán)次數(shù) * 執(zhí)行機(jī)總數(shù)

樣本計(jì)數(shù)邏輯:由 JMeter分布式執(zhí)行原理可知,執(zhí)行機(jī)(Slave)執(zhí)行的測(cè)試腳本是由調(diào)度機(jī)(master)分發(fā)的戒悠,故每臺(tái)執(zhí)行機(jī)執(zhí)行的測(cè)試腳本都是相同的熬荆,故而性能測(cè)試總樣本數(shù) = 測(cè)試腳本樣本數(shù) * 執(zhí)行機(jī)總數(shù)。

為更好的模擬性能并發(fā)場(chǎng)景绸狐,還需要設(shè)置集合點(diǎn)惶看。后面再寫(xiě)對(duì)應(yīng)的blog。

常見(jiàn)問(wèn)題及解決

1六孵、在連接時(shí)報(bào):connection refused to host:10.10.90.69 nested exception is...錯(cuò)誤纬黎,

可能原因:jmeter安裝文件放到有中文字符的目錄路徑下,導(dǎo)致啟動(dòng)JMeter-server.bat時(shí)報(bào)錯(cuò)劫窒;

解決辦法:把jmeter安裝文件放到其他沒(méi)有中文字符的路徑下本今。

2、agent機(jī)器在發(fā)送請(qǐng)求時(shí)拿不到CSV文件中的值主巍。

答:Jmeter主機(jī)能夠傳遞測(cè)試腳本給Agent機(jī)器冠息,但是不能夠傳遞CSV文件的內(nèi)容,也就是說(shuō)CSV文件需要在每臺(tái)agent機(jī)器上對(duì)應(yīng)目錄拷貝一份孕索」浼瑁可參考我前面提到的做法;

3搞旭、例如我們要求性能是并發(fā)數(shù)1200散怖,然后我們有兩臺(tái)slave,那我們寫(xiě)性能測(cè)試腳本的時(shí)候肄渗,是把并發(fā)數(shù)寫(xiě)成600镇眷,然后把腳本復(fù)制到每一臺(tái)Agent設(shè)備?還是寫(xiě)一個(gè)并發(fā)數(shù)1200的腳本翎嫡,在Controller上運(yùn)行即可欠动,Controller會(huì)自動(dòng)分配性能壓力?抑或者寫(xiě)一個(gè)并發(fā)數(shù)為600在Controller端運(yùn)行惑申,同樣配置下發(fā)到每個(gè)Agent上呢具伍?

答:master會(huì)給每個(gè)slave發(fā)送同一份jmx,所以每一個(gè)slave都運(yùn)行相同并發(fā)數(shù)圈驼,只要保證總和是我們的性能需求即可人芽。

4、怎么查看端口是否被占用碗脊?被占用怎么處理啼肩?

答:

(1)查看1099端口:

netstat -ano | findstr "1099"

tasklist | findstr "1099"

(2)打開(kāi)“jmeter.properties”,配置執(zhí)行機(jī)遠(yuǎn)程啟動(dòng)端口(默認(rèn)為 1099)衙伶,

如改為:

server_port=1029

server.rmi.localport=1029

5祈坠、在Controller端上控制某臺(tái)機(jī)器Run,提示"Bad call to remote host"矢劲。

解決方法:檢查slave機(jī)器上的jmeter-server有沒(méi)有啟動(dòng)赦拘,

檢查master機(jī)器上的JMeter.properties中remote_hosts的配置是否有錯(cuò)誤。


6芬沉、Agent機(jī)器啟動(dòng)Jmeter_server.bat時(shí)躺同,后臺(tái)提示:"could not find ApacheJmeter_core.jar"

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

7丸逸、無(wú)法連接slave機(jī)器蹋艺,

可能原因:slave機(jī)器開(kāi)啟了防火墻,網(wǎng)絡(luò)不通等黄刚;

解決辦法:關(guān)掉防火墻捎谨;

檢查slave服務(wù)器和被測(cè)試服務(wù)器之間是否可以ping通;

8憔维、slave機(jī)器執(zhí)行腳本的時(shí)候涛救,若斷言執(zhí)行成功則不返回請(qǐng)求響應(yīng)數(shù)據(jù)及詳細(xì)斷言信息。

9业扒、master機(jī)器上收不到slave機(jī)器連接過(guò)來(lái)的信息检吆。

方案:檢查slave服務(wù)器的hostname和/etc/hosts中服務(wù)器對(duì)應(yīng)的名字是否相同,就是ip程储、端口配對(duì)了沒(méi)

10蹭沛、csv文件最好設(shè)置相對(duì)路徑,不要設(shè)置絕對(duì)路徑以免出現(xiàn)問(wèn)題章鲤。

參考:http://jmeter.apache.org/usermanual/remote-test.html

http://www.cnblogs.com/puresoul/p/4844539.html

http://www.cnblogs.com/fengpingfan/p/5583954.html

http://www.51testing.com/html/15/175815-132407.html

http://zlfwmm.blog.51cto.com/5892198/1762598

http://chenmg.blog.51cto.com/3039876/1730456

http://m.blog.csdn.net/article/details?id=42063231

http://m.blog.csdn.net/article/details?id=42004959

本文出自 “ydhome” 博客致板,http://ydhome.blog.51cto.com/8948432/1862841

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咏窿,隨后出現(xiàn)的幾起案子斟或,更是在濱河造成了極大的恐慌,老刑警劉巖集嵌,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝挤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡根欧,警方通過(guò)查閱死者的電腦和手機(jī)怜珍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凤粗,“玉大人酥泛,你說(shuō)我怎么就攤上這事。” “怎么了柔袁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵呆躲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我捶索,道長(zhǎng)插掂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任腥例,我火速辦了婚禮辅甥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘燎竖。我一直安慰自己璃弄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布构回。 她就那樣靜靜地躺著谢揪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捐凭。 梳的紋絲不亂的頭發(fā)上拨扶,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音茁肠,去河邊找鬼患民。 笑死,一個(gè)胖子當(dāng)著我的面吹牛垦梆,可吹牛的內(nèi)容都是我干的匹颤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼托猩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼印蓖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起京腥,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赦肃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后公浪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體他宛,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年欠气,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厅各。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡预柒,死狀恐怖队塘,靈堂內(nèi)的尸體忽然破棺而出袁梗,到底是詐尸還是另有隱情,我是刑警寧澤憔古,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布遮怜,位于F島的核電站,受9級(jí)特大地震影響投放,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜适贸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一灸芳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拜姿,春花似錦烙样、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至壁却,卻和暖如春批狱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背展东。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工赔硫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盐肃。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓爪膊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親砸王。 傳聞我的和親對(duì)象是個(gè)殘疾皇子推盛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Jmeter分布式執(zhí)行原理: 1、Jmeter分布式測(cè)試時(shí)谦铃,選擇其中一臺(tái)作為調(diào)度機(jī)(master/Controll...
    帶肥肉的羊肉串閱讀 5,363評(píng)論 0 11
  • Jmeter 是java 應(yīng)用耘成,對(duì)于CPU和內(nèi)存的消耗比較大,因此驹闰,當(dāng)需要模擬數(shù)以千計(jì)的并發(fā)用戶時(shí)凿跳,使用單臺(tái)機(jī)器模...
    宇文臭臭閱讀 1,270評(píng)論 0 0
  • Jmeter 是java 應(yīng)用,對(duì)于CPU和內(nèi)存的消耗比較大疮方,使用單臺(tái)機(jī)器模擬以千計(jì)的并發(fā)用戶就有些力不從心控嗜,甚至...
    alamZheng閱讀 950評(píng)論 0 4
  • 在使用Jmeter進(jìn)行性能測(cè)試時(shí),如果并發(fā)數(shù)比較大(比如最近項(xiàng)目需要支持1000并發(fā))骡显,單臺(tái)電腦的配置(CPU和內(nèi)...
    ying_728閱讀 370評(píng)論 0 0
  • 【讀經(jīng)】 伯4章 【金句】 “人若想與你說(shuō)話疆栏,你就厭煩嗎曾掂?但誰(shuí)能忍住不說(shuō)呢? (約伯記 4:2 和合本) 【感動(dòng)】...
    chanor閱讀 218評(píng)論 0 0