Introduction jmeter
What jmeter that?
jmeter is apache organizational development, open source, pure java stress test tool .
jmeter what can be used to measure?
- | __ static resources (sent to the client's file)
| __ dynamic resource (get different answers depending on the user)
| __ server, network
Download & Installation & Start
step1: first confirm java installed
As already installed java, can step2. Otherwise, first download and install java (java download address http://www.oracle.com/technetwork/java/javase/downloads/index.html )
step2: jemeter official website to download it
Specific reference download process ( https://www.jianshu.com/p/0e4daecc8122 )
step3: Start jmeter in the download path
➜ bin pwd
/ Users / liurong07 / Downloads / Download software _ / the Apache-jmeter-3.3 / bin
➜ bin sh jmeter.sh
After starting:
use
The concept of science
Thread Group: jmeter java is implemented using a java thread to simulate a user. So the thread group is a set of virtual users.
Application Example 1 (GUI mode / http web stress test)
(对ark.baidu.com网页做压力测试)
配置虚拟用户
- 添加一个线程组
- 填写线程组参数
线程数100:说明这个小组ark_community_group0里面有100个虚拟用户。
Ramp-Up Period(in seconds): 设定了一个时间值。100个用户在1s时间内陆续开始访问网页。
循环次数:每个虚拟用户访问完网址的循环次数。如果设定1次表示虚拟用户访问后就退出了。如果是永远,则每次访问完都持续访问直到强制停止。
所以这一组参数表示:ark_community_group0这个小组里面有100个虚拟用户,它们在1s内陆续访问ark社区,访问完后会退出。
配置访问网页
查看结果
添加监听器(查看结果树、聚合报告、用表格察看结果、生成概要结果)之后:
聚合报告分析(时间单位ms)
聚合报告是累加的,每次运行结果都在原来基础上累计统计。
字段详情
Average:单次请求的平均响应时间
Median:中位数,50%的响应时间<=9s
90%Line: 九分位数,90%的响应时间<=19s。 95%Line,99%Line同理。
Min,Max:最小响应时间、最大响应时间。
Error%:请求错误的样本占比。
Throughput:接收并转发的最大数据速率。
Recived、Sent:接受、传输速率。
使用举例2(命令行模式/http网页压力测试)
测试配置文件ark_community_group2.jmx保存下来
用命令行跑配置文件,测试结果记录在ark_community_group2_log.jtl
也可以用GUI察看jtl报告
使用举例3(分布式发压测试)
原理
为什么做分布式压测?
如果在一台机器上做压测,并发数很大(千、万以上),会超过单台机器的CPU、内存承受限度。解决办法:一台机器做控制机控制多台子执行机,多个子执行机一起来分担压测任务。
分布式压测怎么做?
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
分布式压测步骤
举例说明:master机器上执行分布式测试,执行过程中把**.jmx测试配置文件分配给slave机器执行,并收集slave执行后的结果**.jtl。
(step1)准备
master和slave上都要安装jmeter,且都关闭防火墙
(step2)配置
(1)master机器配置
bin/jmeter.properties里面的remote_hosts字段配置上slave机器的ip(172.24.181.253)
(2) slave机器配置
slave机器的bin/jmeter-server文件的 RMI_HOST_DEF字段配置上自己本机ip(172.24.181.253)
(step3)GUI方式启动
(1)在slave机器上启动server即可(注意slave上的server先启动哦)
sh jmeter-server
(2) 在master机器上启动jmeter客户段(一定要在slave的server启动后启动啊)
查看结果:
(step4)命令行方式启动
在master上执行命令:
如果需要指定某一台slave(172.24.181.253)执行测试脚本:
sh jmeter.sh -n -t ark_community_group2.jmx -R 172.24.181.253 -l w.jtl
例如下面的例子:(sh jmeter.sh -n -t ark_community_group2.jmx -R 10.99.197.118,10.99.195.114,10.94.221.96,10.94.63.53 -l ark03_04_05_junheng184.jtl)
查看w.jtl执行结果,看到运行成功:
如果需要指定全部的slave都跑脚本,就用这个命令:
sh jmeter.sh -n -t ark_community_group2.jmx -r -l result1.jtl
和GUI模式的效果等价:
注意事项
常遇到远程启动时链接失败问题,需要确保以下关键点
1. master和slave的防火墙要关闭,master和slave可以ping通
2. master和slave的jmeter尽量保持版本一致
3. jmx配置文件没有必要拷贝到slave上,因为master的远程启动开始后,它自动会分配给slave去执行。
4. jmx配置的线程数目是100的话,每个slave按照jmx的配置数目执行,所以每个slave执行线程数目也是100,并不是分担100的一部分。
5. slave能够承受多大的线程数呢,万一slave被打爆了?
slave机器能够处理线程数和自身的硬件参数有关,举例如果slave的CPU是1.4G-3GHZ,内存是1G内存,可以处理线程数100-300,建议配置不超过100(考虑到承担的任务有可能是xml计算密集型或者网卡交换机影响)
参考:
分布式压测遇到的坑
http://www.mamicode.com/info-detail-1729730.html
https://www.cnblogs.com/Fine-Chan/p/6233823.html
http://www.cnblogs.com/saryli/p/6596015.html
http://blog.163.com/lucas_nina/blog/static/185960149201492945117318/(硬件参数与建议线程数)
其他场景补充
场景1. 同一个机器上同时启动2个(多个)jmeter-server
可以启动多个,比如在一台机器上启动2个jmeter-server
配置过程:
(step-1)slave端配置
jmeter-slave所在的bin目录下复制出一份jmeter-server2文件,并修改其中端口号为1199:
${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1199} -s -j jmeter-server.log "$@"
启动jmeter-server、jmeter-server2,查看端口已经启动ok:
[work@cp01-ark03 ~]$ netstat -tunpl|grep 1099 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 :::1099 :::* LISTEN 13156/java [work@cp01-ark03 ~]$ netstat -tunpl|grep 1199 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 :::1199 :::* LISTEN 14616/java |
(step-2) master端配置
jmeter-master的jmeter.properties文件配置:
remote_hosts=10.99.197.118:1099, 244 10.99.197.118:1199, |
(step-3)调度方法
sh jmeter.sh -n -t ark_community_group2.jmx -R 10.99.197.118:1199,10.99.197.118:1099 -l 118.jtl |
⚠️如果不指定端口号,这样直接调用的话就使用1099端口号跑脚本,1199端口没有跑(sh jmeter.sh -n -t ark_community_group2.jmx -R 10.99.197.118 -l 118.jtl)或者(sh jmeter.sh -n -t ark_community_group2.jmx -R 10.99.197.118,10.99.197.118 -l 118.jtl)
遗留问题
同一个线程组下面,能不能拆分成比例去访问http?
path的参数可变化设置
slave的守候进程是什么时候起来的,每个slave分担任务量是怎样?(slave-master怎么交互)(master-slave的部署是不是需要在一个网段下)
断言
相关参考
静态资源、动态资源
http://blog.csdn.net/u012110719/article/details/44239429
jmeter百科
https://baike.baidu.com/item/Jmeter/3104456?fr=aladdin
jmeter下载安装
https://www.cnblogs.com/ceshisanren/p/5639895.html
https://www.jianshu.com/p/0e4daecc8122
jmeter聚合报告分析
https://www.cnblogs.com/Uther/p/5292123.html
Custom Script mode:
https://www.cnblogs.com/linglingyuese/articles/linglingyuese-two.html
JTL format parsing
https://www.cnblogs.com/miaomiaokaixin/p/6118081.html
Distributed Introduction
https://www.cnblogs.com/puresoul/p/4844539.html
http://blog.csdn.net/wuhenyan/article/details/53117556
Examples of jmeter pressure measured thrift
http://blog.csdn.net/mn960mn/article/details/50684877
http://blog.csdn.net/cmrsautomation/article/details/53357976
Custom header
http://blog.csdn.net/difffate/article/details/73442130