Jackei 的测试生活与人文社会读本

带着梦想和激情在现实中旅行
posts - 812, comments - 3861, trackbacks - 26, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

作为一个纯 JAVA GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter 也可以像 LoadRunner 一样通过使用多台机器运行所谓的 Agent 来分担 Load Generator 自身的压力,并借此来获取更大的并发用户数。根据 JMeter官方文档的署名,你需要自己完成这个配置,不过不用担心,这将非常简单 ^_^

1.              在所有期望运行 JMeter 作为 Load Generator 的机器上安装 JMeter,并确定其中一台机器作为 Controller,其他的机器作为 Agent。然后运行所有 Agent 机器上的JMeter-server.bat文件——假定我们使用两台机器 192.168.0.1 192.168.0.2 作为 Agent

2.              Controller 机器的 JMeter 安装目录下找到 bin 目录,再找到 JMeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;

3.              在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行 JMeter Agent 的机器,这里需要修改为“remote_hosts=192.168.0.1:1664,192.168.0.2:1664”——其中的 1664 JMeter Controller Agent 之间进行通讯的默认 RMI 端口号;

4.              保存文件,并重新启动 Controller 机器上的 JMeter.bat,并进入 Run -> Remote Start 菜单项。看到啥了?^_^

Feedback

#1楼[楼主]   回复  引用  查看    

2006-09-14 23:05 by jackei      
今天借到一位朋友的 email 投诉,说偶 blog 中文章的字体太小,不方便查阅,所以偶从这篇文章开始加大了字号,希望可以对大家的阅读感受有所改善。

对于以前的文章,因为实在没有时间一篇篇的修改字体字号——博客园没有提供统一调整字体的功能,而 400 多篇也是一个不小的工作量。所以只能想到两个方法暂时解决一下这个问题:
1.请大家注意浏览器的字体设置。IE 在“查看→文字大小”菜单下可以调整;Firefox 可以提供无限制的字体缩小放大功能;
2.把感兴趣的文章 copy 到 word 之类的文字处理工具中阅览。

如果大家有其他好的建议和意见,可以留言或者 email 我,谢谢 ^_^

#2楼   回复  引用    

2006-09-15 10:05 by xyuan007[未注册用户]
我晕!
按住CTRL键,动动鼠标滚轮,字体就变大了。我这里IE和OPERA都可以这样操作的。
别告诉我你鼠标没滚轮啊!

#3楼   回复  引用    

2006-09-26 21:59 by 沙发[未注册用户]
我的按住鼠标滚轮向前怎么是变小呢?

#4楼   回复  引用    

2006-09-27 17:09 by tomatoes[未注册用户]
图片看不到

#5楼[楼主]   回复  引用  查看    

2006-09-27 22:05 by jackei      
@tomatoes
应该可以的,因为图片是从别的地方链过来的,所以如果看不到可能要刷新几次。

#6楼   回复  引用    

2006-11-02 15:50 by 冷月[未注册用户]
近来无事,我也打算学学 呵呵

#7楼[楼主]   回复  引用  查看    

2006-11-02 18:04 by Jackei      
@冷月
其实作多了就会发现性能测试工具只不过是用来锦上添花的,而不是最关键的。多看看性能测试方面的资料吧。哪天有空可以小聚一下聊聊 ^_^

#8楼   回复  引用    

2006-12-08 22:21 by liyoukebit@sina.com.cn[未注册用户]
jackei 你好,很感谢,你跟大伙分享的心得体会。我在工作遇到一个问题,想和你讨论一下:
前不久我用Jmeter 3 Agent, 1 Contrl 模拟300个并发进程进行测试,结果测试通过了。后来改用LoadRunner 模拟300个并发进程对同一server进行测试,服务器59sec时候挂掉了,查看日志,连接池超过150个,导致Java虚拟机挂了。by the way,我查看了网络连接的日志,jmeter模拟并发连接数,峰值大约是60个。http://bbs.51testing.com/thread-50486-1-1.html
所以我对Jmeter 分布测试的可靠性表示怀疑,不知你有没有做过相关的比较和验证。

#9楼[楼主]   回复  引用  查看    

2006-12-09 21:33 by Jackei      
@liyoukebit@sina.com.cn

应该说不排除 LR 和 JMeter 模拟多用户并发时存在差异的可能。

建议先用 JMeter 单机模拟 300 个并发用户和 3 agant + 1 control 对比一下,再跟 LR 的测试结果对比一下。

另外,看了你在 51 上面的帖子,建议你对比一下 LR 和 JMeter 如下几项的区别:

1.脚本包含的内容;
2.平均事务响应时间;
3.每秒事务数。

我想有你的问题有可能是因为脚本所包含的内容存在差异造成的,如果你这个脚本是用 JMeter 的 Proxy Server 的方式录制的,建议换用 Badboy 重新录制再测试一下看看。

关于如何使用 Badboy 录制生成 JMeter 脚本,可以参考下面这篇文章:
http://www.cnblogs.com/jackei/archive/2006/11/10/557160.html">http://www.cnblogs.com/jackei/archive/2006/11/10/557160.html

希望可以解决你的疑问 ^_^

#10楼   回复  引用    

2006-12-10 00:12 by liyoukebit@sina.com.cn[未注册用户]
呵呵,很感谢 jackei的及时回复。
因为我做以上工作只是评价工具的可用性,所以我录制的操作很简单,登陆,退出。所以可以排除脚本内容的问题。也许是我有一个地方误解了,我设置的Jmeter Contrl 100个进程启动,原来我理解其它Agent各做100个,总共100*3个。现在怀疑是Contrl 把100个分摊到每个Agent上。后天上班,做个试验,呵呵。周末愉快。

#11楼[楼主]   回复  引用  查看    

2006-12-10 16:39 by Jackei      
@liyoukebit@sina.com.cn

呵呵,不客气,回头确认了问题的根源记得回来和大家通报一声 ^_^

顺便说一下,你原来的理解没错,的确是“Agent各做100个,总共100*3个”。

#12楼   回复  引用    

2006-12-15 20:19 by janezhang815[未注册用户]
jmeter解出来后,没有进行环境设置,端口用1664,提示bad call;改用1099,OK!

#13楼[楼主]   回复  引用  查看    

2006-12-17 23:52 by Jackei      
@janezhang815

嗯,默认应该是 1099 端口的。

#14楼   回复  引用    

2007-01-04 17:29 by liyoukebit@sina.com.cn[未注册用户]
@Jackei
不好意思,前段时间忙,耽搁了,没有及时给大家汇报结果,写了个脚本分析一下连接情况,确认“Agentg各做100个,总共100*3个”。但是并不是并发做,我有三个Agent42,21,220,由220做Server,三个Agent并不是并发开始,做了几次都是21,220先开始执行,大约2分钟后,42才开始。恰巧我的脚本比较短,所以21,220执行结束了 42连结数才达到最大,所以出现上述的疑问。谢谢你的帮忙

#15楼   回复  引用    

2007-01-04 17:51 by liyoukebit@sina.com.cn[未注册用户]
by the way,想请教一个Loadrunner的问题。性能测试工具我是Jmeter先入手的,经常遇到这样一个场景,电信行业资源管理,集团用户下工作单,让省和地市公司用户干活,表现为在web上操作一系列工单。比如输入工单号orderCode="中国移动网资[2006]",生成一条工单记录,然后web通过,工单ID来操作,比如http://192.9.100.200?orderID=343132323,在Jmeter中 orderCode采用文件变量进行输入,而orderID从新建定单返回网页中使用正则表达式匹配orderID,以变量形式代替orderID。这样就可以模拟多个新建定单操作。
问题:LoadRuner如何处理,或者说技术支持推荐做法,有些人建议从数据库读出orderID,我认为这样不是加重服务器端的负载了,我觉得还是可以采用和Jmeter相似的方法,我想听听你的建议。

有些长,辛苦了,能和高手交流,挺好的,哈

#16楼[楼主]   回复  引用  查看    

2007-01-04 18:16 by Jackei      
@liyoukebit@sina.com.cn

呵呵,多谢你的回复 ^_^

对于你提到的问题,建议你参考一下 LR 中的 web_reg_save_param 函数。

有机会多交流 ^_^

#17楼   回复  引用    

2007-01-10 10:22 by angel[匿名][未注册用户]
jackei 你好:想问一个问题:

1、模拟并发用户时,Agent上分别设置用户的数量,那这台机是不是不用设置用户数量(只需在Agent上设置用户的数)

#18楼   回复  引用    

2007-01-10 10:25 by angel[匿名][未注册用户]
jackei 你好:想问一个问题:

1、模拟并发用户时,Agent上分别设置用户的数量,那Controller这台机是不是不用设置用户数量(只需在Agent上设置用户的数)

#19楼[楼主]   回复  引用  查看    

2007-01-10 13:35 by Jackei      
@angel[匿名]
1.所谓的 Agent,是指运行了 jmeter-server.bat 的那台机器;
2.所谓的 Controller,是指运行了 JMeter(UI 客户端或者命令行方式)的那台机器;
3.Agent 可以和 Controller 运行在同一台机器上,也可以运行多个 Agent 在同一台机器上;
4.JMeter 中不能对单个 Agent 设置并发用户数量,例如:有三个 Agent,你在 JMeter 中定义了 100 个并发用户,那么就是 3 个 Agent 每个都模拟 100 个用户,一共是 300 个。

#20楼   回复  引用    

2007-01-31 17:25 by 七夜[未注册用户]
我在两台Agent机器上,执行了JMeter-server.bat文件

在Controller 上 Run -> Remote Start 菜单项 里选择那两台Agent

这时通过查看Agent上的jmeter.log文件,也确定已经连接上了。

这个时候,我在Controller上运行脚本,我想知道怎么判断,Agent是在工作?

另外:在远程停止和远程退出菜单项里,两个Agent的IP始终都是灰色的状态。

所以我一直担心,Controller和Agent之间虽然连上了,但是Agent没有在工作

#21楼[楼主]   回复  引用  查看    

2007-01-31 17:57 by Jackei      
有个最简单有效的方法。在服务器上装一个 Apache,然后通过 JMeter 访问 Apache 的默认页面。执行完成后看看 Apache 的访问日志,就知道哪些 IP 的机器访问过了,也就知道 Agent 工作是否正常了。

呵呵,上次做过一个这样的实验,不过也不知到底道算是把复杂问题简单化,还是把简单问题复杂化了 ^_^

#22楼   回复  引用    

2007-02-01 11:41 by 七夜[未注册用户]
谢谢,Jackei !

我虽然没有安装Apache,但是你启发了我

我在服务器(linux服务器)上执行了netstat -ant 命令,看Agent 机器有没有在
服务器上建立tcp连接。

结果只发现了Controller的机器的IP,没有发现Agent 机器的IP。

我搞了半天,也不知道问题出在那里!

另外:如果Agent机器能正常工作的话,在聚合报告里能体现出来吗?

#23楼[楼主]   回复  引用  查看    

2007-02-01 13:11 by Jackei      
@七夜

如果Agent机器能正常工作的话,在聚合报告里能体现出来吗?
——>如果我没有记错,应该是不会体现出来的。

结果只发现了Controller的机器的IP,没有发现Agent 机器的IP
——>暂时没有想到答案,或者你自己再查查吧,参考一下 JMeter 的手册,在 %JMETER_HOME%/printable_docs 目录下有比较详细的文档介绍。

#24楼   回复  引用    

2007-02-05 16:18 by 七夜[未注册用户]
好的,谢谢 Jackei !

#25楼   回复  引用    

2007-02-06 14:48 by grace[未注册用户]
请问,我的控制机器(就是运行脚本的机器,在中国),跟agenet机器(在美国)不在一个网段上,ping的时候网络延迟是200多毫秒呢,这样是否会影响测试结果?

#26楼   回复  引用    

2007-02-28 14:43 by coolala[未注册用户]
remote_hosts字段是否可以将controller的ip添加进去?127.0.0.1可以吗?

#27楼   回复  引用    

2007-03-30 10:17 by wangs[未注册用户]
Jackei我有个一问题,如果选择了分布式,那么Jmeter的Controller报告是包含了Agent 的结果 还是仅仅是controller自身的结果?

#28楼   回复  引用    

2007-03-30 10:20 by wangs[未注册用户]
sorry~!刚刚才注意到七夜的问题,原来和我是同一个问题...

#29楼   回复  引用    

2007-04-23 15:24 by wuhuawu09[未注册用户]
@grace
应该会的,远程控制最好是在同一网段的。我也不清楚。。。

#30楼   回复  引用    

2007-04-23 15:25 by wuhuawu09[未注册用户]
@coolala
自己试试不就知道了,呵呵

#31楼[楼主]   回复  引用  查看    

2007-04-23 19:55 by Jackei      
@wuhuawu09

呵呵,多谢回复 ^_^

#32楼   回复  引用    

2008-06-12 15:31 by wujianping[未注册用户]
Jackei 你好,我想用ant 来驱动jmeter来做分布式测试,一直没找到相关资料,只能在本地执行用例没办法远程启动agent,谢谢Jackei帮忙解答一下

#33楼[楼主]   回复  引用  查看    

2008-06-21 16:36 by Jackei      
@wujianping
不好意思,没有试过用 ant 驱动的方法,不过可以先确认一下远端的agent是否已经启动了,能否手工通过 JMeter GUI 连过去并正常测试,OK 了以后再尝试 ant 吧 :)

如果还有问题,建议找个开发高手帮忙看看 :)

#34楼   回复  引用    

2008-06-23 20:07 by liangjz[未注册用户]
# Remote Hosts - comma delimited
remote_hosts=10.0.38.74

# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1664



我测试时候要如上才正常执行

#35楼[楼主]   回复  引用  查看    

2008-06-23 21:50 by Jackei      
@liangjz
hi,JZ. 上次看你blog说开始引入JMeter,现在大规模使用JMeter了吗?

#36楼   回复  引用    

2008-10-27 18:16 by 枪与玫瑰[未注册用户]
在使用2.3.1版本时,
server_port=这一行可以不填,
remote_hosts后面也不必加端口号,加了反而连不上。
另agent要设置一个JMETER_HOME的环境变量。

#37楼   回复  引用    

2009-05-07 18:46 by Nancychen
Hi 博主,
我现在遇到2个问题,按照我的理解在聚合报告里面,troughput=average(sec)*samples/60,可是我先在得到的结果是举个例子,我的sample是311.average是29383ms,可是对应的throughput只有2.6/min,如果我的理解没错的话,按照上面的计算公式,算出的throughput应该是150/min.这相差也太远了吧?麻烦你帮我解答!谢谢!

还有个问题,我测试的系统是个供应链管理平台,需要在网页上查看单证,例如每天有几千个注册用户要查看他们的电子订单和发票,可是每张单证都有个guid是唯一的,这样我参数化用户后,每次登陆打开的单证都不一样,我用badboy录制的脚本,我是否还需要把单证的guid也参数化?

#38楼[楼主]   回复  引用  查看    

2009-05-07 19:04 by Jackei      
@Nancychen
第一个问题,推荐你看看“理解 JMeter 聚合报告(Aggregate Report)” http://www.cnblogs.com/jackei/archive/2007/01/17/623166.html" target="_new">http://www.cnblogs.com/jackei/archive/2007/01/17/623166.html

第二个问题,如果你是依靠GUID来请求服务器返回某个单证,就需要参数化。

#39楼   回复  引用    

2009-05-08 12:10 by Nancychen
谢谢你的回答!

#40楼   回复  引用    

2009-05-12 14:19 by Nancychen
HI,Jackei,我又遇到个很急的问题,我把loginId参数化以后每次登陆都失败,请求上看到的是“loginId=%24%7BloginId%7D&password=123456”,响应数据是“login failed”,开发的说这个请求里的loginId是错的,可是我明明是用一个正确的txt文件里的loginId区登陆的,为什么参数化后会失败?

#41楼[楼主]   回复  引用  查看    

2009-05-12 14:28 by Jackei      
@Nancychen
推荐看看这篇 http://www.cnblogs.com/Carrie_Liang/archive/2008/11/03/Jmeter.html
JMeter脚本的参数化

另外,更多信息请到这里查找 http://www.cnblogs.com/jackei/archive/2006/11/13/558720.html" target="_new">http://www.cnblogs.com/jackei/archive/2006/11/13/558720.html

#42楼   回复  引用    

2009-05-15 18:31 by Nancychen
有没有人 遇到过这个问题:
我在一个test plan 里面添加了12个线程组,可是在我执行这个testplan时,发现其中一个线程组里居然执行了其他线程组里的http request,我只好用最笨的办法,把他们全都分开,到时候分别执行test plan,不好这样好像很麻烦,要同时打开n个jmeter。还有没有更好的办法呢?



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 504638




相关文章:

相关链接: