Jmeter之分布式测试

Jmeter之分布式测试

2017年10月27日 15:20:57


由于(1)Jmeter 是纯java 应用,对于CPU和内存的消耗比较大,并且受到JVM的一些限制; 

  一般情况下,依据机器配置,单机的发压量为300~600,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就容易卡死,引起JAVA内存溢出错误;(在1.4GHz~3GHz的CPU、1GB内存的JMeter客户端上,可以处理线程100~300。但是WebService例外。XML处理是CPU运算密集的,会迅速消耗掉所有的CPU。一般来说,以XML技术为核心的应用系统,其性能将是普通Web应用的10%~25%。)

(2)单台机器模拟的时候,如果并发数量较多且发送的网络包较大时,单机的网络带宽就会成为测试瓶颈,无法真正模拟高并发,导致测试结果失真(例如在要一秒内发送3000个请求,合计512kb,但是测试电脑只有256的上传带宽,那么实际测试的时候只是模拟了在一秒内发送1500个请求(256kb)的场景,导致测试结果失真。下载带宽的影响也是类似的);即:如果所有负载由一台机器产生,网卡和交换机端口都可能产生瓶颈,所以一个JMeter客户端线程数不应超过100。

(以上是测试机器的分析;应该还有别的,如硬盘等)

(3)真正的业务场景并发,我觉得应该是用户数大,每个用户的请求数小。如:更可能是1000个用户在2秒内各发起2个请求,而不是200个用户在2秒内各发起10个请求,虽然总的请求数都是2000个。


  为避免以上问题,更合理地进行性能测试,我们可以使用Jmeter提供的分布式测试功能。

Jmeter分布式执行原理:

  1、Jmeter分布式测试时,选择其中一台作为调度机(master/Controller),其它机器做为执行机(slave/Agent)。

  2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,应该是通过命令行模式执行的。

  3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。

如下图所示:

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

注意:

(1)每一台jmeter远程服务器(slave机器)都执行相同的测试计划,jmeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划;

(2)采用JMeter远程模式并不会比独立运行相同数目的非GUI 测试更耗费资源。但是,如果使用大量的JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞;

(3)默认情况下,master机器是不执行参与生成并发数据的;

(4)调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。

分布式测试操作步骤:

1、准备多个测试电脑(m1、s1、s2、s3, master、slave),并都安装1.7以上版本jdk,配置环境变量;

2、将m1使用的Jmeter打包发到c1、c2、c3电脑,并于在相同路径下安装。这样就保证了Jmeter版本一致,额外下载安装的插件一致。如果要用到csv作为数据源,那么强烈建议将csv文件放到bin\examples等文件夹下,这样在slave机上才能正确读取-因为安装路径一致所以csv路径也就一致了;

3、设置并启动slave机器

(1)分别在s1、s2、s3(slave机器)上,进入%JMETER HOME%/bin/目录,

打开“jmeter.properties”,配置执行机远程启动端口(默认为 1099),

如改为:

server_port=1029

server.rmi.localport=1029

(2)运行JMeter-server.bat(windows系统)/jmeter-server.sh (linux)来启动slave机器的Jmeter,正常启动后会弹出命令行窗口,提示"created remote object";

注:我这被坑了,如上截图(我没有改端口,使用默认的),ip后面有一个冒号,跟着一串数字61470,我开始以为有这么奇怪的端口号,把这个配到master机中,发现启动不了,所以slave机器的端口号要在“jmeter.properties”中查看、配置;

4、配置、启动master机器

(1)在m1(master机器)的%JMETER HOME%/bin/目录,找到 JMeter.properties 这个文件,使用notepad++或记事本等工具打开。

(2)在打开的文件中查找“remote_hosts”,你会找到“remote_hosts=127.0.0.1”。

127.0.0.1指本机,表示本机也可作为JMeter Agent运行的机器。

  这里需要将slave机器的IP及端口号以追加的形式填入,使用逗号分隔,末尾不用加标点符号,如“remote_hosts=192.168.88.180:1099,192.168.88.218:1099”;

其中的 1099 为 JMeter 的 Controller 和 Agent 之间进行通讯的默认 RMI 端口号;

   (引申阅读:从JMeter 2.3.1开始,JMeter远程服务器会自己启动RMI注册;用户没有必要单独启动RMI注册。假设测试人员一定要单独启动RMI注册,可以在远程节点上定义JMeter属性server.rmi.create=false。

   默认情况下,JMeter远程服务器的RMI使用动态端口号。这样就会为防火墙配置带来麻烦,因此JMeter 2.3.2及其以后的版本,会检查JMeter属性server.rmi.localport。如果该值非零,JMeter远程服务器就会用它来作为本地端口号。)

(3)保存文件,然后运行m1上Jmeter.bat,启动gui界面,并进入 Run -> Remote Start 菜单项,在这里可以看到远程启动菜单下面有刚刚添加的两个slave机器的ip地址

在这里,我们可分别启动点击ip地址启动对应的slave机器,也可以直接选择“远程全部启动”来将所有的slave启动。

(4)有时候用作slave的机器太少,仍不能满足需要,则需要将作为master的电脑也当作slave,则同样需要修改 JMeter.properties文件,将master的IP、端口写入。

类似其他slave机器,需要先启动机器的jmeter-server.bat,然后再打开JMeter.bat,进入Run -> Remote Start菜单,可以看到master机器也作为远程机器了。

5、验证分布式测试是否成功

为了便于验证,我先设置一个线程,发送一个请求;

(1)我只启动一台192.168.88.180这台slave机,

察看结果树,可知,只发送了一次请求,且master机器没有收集通过了断言的请求;

在slave机器的控制台也输出了被调用命令

(2)我启动所有slave机器(我这里设置了两台),

察看结果树可知,两台slave机器都各发送了一次请求,并且master机器收集没有通过了断言的请求响应信息;

请求数计算

总样本数 = 线程数 * 循环次数 * 执行机总数

样本计数逻辑:由 JMeter分布式执行原理可知,执行机(Slave)执行的测试脚本是由调度机(master)分发的,故每台执行机执行的测试脚本都是相同的,故而性能测试总样本数 = 测试脚本样本数 * 执行机总数。

为更好的模拟性能并发场景,还需要设置集合点。后面再写对应的blog。

常见问题及解决

1、在连接时报:connection refused to host:10.10.90.69 nested exception is...错误,

可能原因:jmeter安装文件放到有中文字符的目录路径下,导致启动JMeter-server.bat时报错;

解决办法:把jmeter安装文件放到其他没有中文字符的路径下。

2、agent机器在发送请求时拿不到CSV文件中的值。

答:Jmeter主机能够传递测试脚本给Agent机器,但是不能够传递CSV文件的内容,也就是说CSV文件需要在每台agent机器上对应目录拷贝一份。可参考我前面提到的做法;

3、例如我们要求性能是并发数1200,然后我们有两台slave,那我们写性能测试脚本的时候,是把并发数写成600,然后把脚本复制到每一台Agent设备?还是写一个并发数1200的脚本,在Controller上运行即可,Controller会自动分配性能压力?抑或者写一个并发数为600在Controller端运行,同样配置下发到每个Agent上呢?

答:master会给每个slave发送同一份jmx,所以每一个slave都运行相同并发数,只要保证总和是我们的性能需求即可。

4、怎么查看端口是否被占用?被占用怎么处理?

答:

(1)查看1099端口:

netstat -ano | findstr "1099"

tasklist | findstr "1099"

(2)打开“jmeter.properties”,配置执行机远程启动端口(默认为 1099),

如改为:

server_port=1029

server.rmi.localport=1029

5、在Controller端上控制某台机器Run,提示"Bad call to remote host"。

解决方法:检查slave机器上的jmeter-server有没有启动,

检查master机器上的JMeter.properties中remote_hosts的配置是否有错误。


6、Agent机器启动Jmeter_server.bat时,后台提示:"could not find ApacheJmeter_core.jar"

解决方法:确定在Agent机器安装jdk,并设置环境变量

7、无法连接slave机器,

可能原因:slave机器开启了防火墙,网络不通等;

解决办法:关掉防火墙;

检查slave服务器和被测试服务器之间是否可以ping通;

8、slave机器执行脚本的时候,若断言执行成功则不返回请求响应数据及详细断言信息。

9、master机器上收不到slave机器连接过来的信息。

方案:检查slave服务器的hostname和/etc/hosts中服务器对应的名字是否相同,就是ip、端口配对了没

10、csv文件最好设置相对路径,不要设置绝对路径以免出现问题。

参考: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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Jmeter分布式执行原理: 1、Jmeter分布式测试时,选择其中一台作为调度机(master/Controll...
    带肥肉的羊肉串阅读 5,351评论 0 11
  • Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模...
    宇文臭臭阅读 1,268评论 0 0
  • Jmeter 是java 应用,对于CPU和内存的消耗比较大,使用单台机器模拟以千计的并发用户就有些力不从心,甚至...
    alamZheng阅读 938评论 0 4
  • 在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内...
    ying_728阅读 369评论 0 0
  • 【读经】 伯4章 【金句】 “人若想与你说话,你就厌烦吗?但谁能忍住不说呢? (约伯记 4:2 和合本) 【感动】...
    chanor阅读 206评论 0 0