ab安装 与POST 实现及问题
ab安装
安装之前先 ab -help 试试有没有安装好,apache 中间件自带ab。
centos7.2下安装ab测试
1.ab运行需要依赖apr-util包,安装命令为:
yum install apr-util
2.需要yumdownload命令下载,没有该命令的话,可以:
yum install yum-utils
3.新建一个目录,下载解压用:
cd /usr/local/test/upload/
mkdir abtmp
cd abtmp
yum install yum-utils.noarch
yumdownloader httpd-tools*
rpm2cpio httpd-tools*.rpm | cpio -idmv //rpm2cpio命令用于将rpm软件包转换为cpio格式的文件
4.将./user/bin/ab复制到系统bin下即可:
cp /usr/local/test/upload/abtmp/usr/bin/ab /usr/bin
5.ab –help
ab使用
ab 的用法是:ab [options] [http://]hostname[:port]/path
例如:
ab -n 1000 -c 200 'http://123.123.123.123:8089/front/login/loginByVerificationCode.htm'
上例表示总共访问登录这个脚本1000次,200并发同时执行,循环了5遍
ab -n 1000 -c 100 -w 'http://22222222/front/login/loginByVerificationCode.htm>>'
/usr/local/test/mg_tv
上面的测试用例表示200并发的情况下,共测试访问登录页面1000次,并将测试结果保存到abreport.html文件中。
ab常用参数的介绍:
-n :总共的请求执行数,缺省是1;(Number of requests)
-c: 并发数,缺省是1;(concurrency)
-t:测试所进行的总时间,秒为单位,缺省50000s
ab结果分析
关注如下几个指标就好:
Requests per second (mean) 相当于 LR 中的 每秒事务数
Time per request (mean)相当于 LR 中的 平均事务响应时间
Percentage of the requests served within a certain time (ms)
传递参数
ab -n 1 -c 1 "http://bjmalldemo.mocentre.cn:8089/#/"
一定要有双引号
ab完成post操作
./ab -n 10 -c 10 -k -p ‘/usr/local/test/mg_tv.txt’ -T ‘application/x-www-form-urlencoded’ ‘http://bjmalldemo.mocentre.cn:8089/front/login/loginByVerificationCode.htm’
新建一个 touch mg_tv.txt 文档,文档内容为json格式Body,[用jmter 或postman 试下body能不能成功]
-p 文件中是post的内容(可以是json格式,可以是&格式)
-T 指定post文件的编码方式使用urlencode
-k keepalive连接 [加-k 一定注意,本人因为加了-k 总出70007错误,去掉后,成功]
遇到的问题
1、post报错
Benchmarking 172.21.0.14 (be patient)...apr_pollset_poll: The timeout specified has expired (70007)
解决办法:vim /etc/sysctl.conf 最后加入
#kernel2.6之前的内核版本添加如下配置: net.ipv4.netfilter.ip_conntrack_max = 655360 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200 我加入的下面的【用uname -a 和lsb_release -a 查看系统版本和内核版本】
#kernel2.6之后的内核版本添加如下配置: net.nf_conntrack_max = 655360 net.netfilter.nf_conntrack_tcp_timeout_established = 1200 net.ipv4.tcp_syncookies = 1 #当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭 net.ipv4.tcp_tw_recycle = 1 #开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_tw_reuse = 1 #开启重用,将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_fin_timeout = 25 #修改系統默认的 TIMEOUT 时间 net.ipv4.tcp_orphan_retries = 1 net.ipv4.tcp_max_orphans = 8192 net.ipv4.ip_local_port_range = 32768 61000 |
sysctl -p
/etc/sysctl
.conf
#不重起服务器,让新配置生效
2、生效配置时又出错
sysctl: cannot stat /proc/sys/net/ipv4/netfilter/ip_conntrack_max: No such file or directory
解决加法:
maybe ip_conntrack
is not loaded. Try:
#lsmod |grep conntrack //查看有没有连接跟踪模块,结果空
If this is empty, load it with:
#modprobe ip_conntrack//主动处理安装连接跟踪模块,再查看,有了
再sysctl -p /etc/sysctl.conf 生效
3、注意不要轻易加-k ,要用单引号
[root@zhang]# ab -c 10 -n 100 http://www.22222222.cn/index.php This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.myvick.cn (be patient).....done Server Software: http-kit #测试服务器的名字 Server Hostname: 172.21.0.14 #请求的URL主机名 Server Port: 80 #web服务器监听的端口 Document Path: /index.php #请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型 Document Length: 799 bytes #HTTP响应数据的正文长度 Concurrency Level: 10 # 并发用户数,这是我们设置的参数之一 Time taken for tests: 0.668 seconds #所有这些请求被处理完成所花费的总时间 单位秒 Complete requests: 100 # 总请求数量,这是我们设置的参数之一 Failed requests: 0 # 表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况 Write errors: 0 Total transferred: 96200 bytes #所有请求的响应数据长度总和。包括每个HTTP响应数据的头信息和正文数据的长度 HTML transferred: 79900 bytes # 所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度 Requests per second: 149.71 [#/sec] (mean) #吞吐率,计算公式:Complete requests/Time taken for tests 总请求数/处理完成这些请求数所花费的时间 Time per request: 66.797 [ms] (mean) # 用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数) Time per request: 6.680 [ms] (mean, across all concurrent requests) #服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level Transfer rate: 140.64 [Kbytes/sec] received #表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。 Connection Times (ms) min mean[+/-sd] median max Connect: 1 2 0.7 2 5 Processing: 2 26 81.3 3 615 Waiting: 1 26 81.3 3 615 Total: 3 28 81.3 6 618 Percentage of the requests served within a certain time (ms) 50% 6 66% 6 75% 7 80% 7 90% 10 95% 209 98% 209 99% 618 100% 618 (longest request)
#Percentage of requests served within a certain time(ms)这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过7ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间
注意事项
可以利用ab完成不复杂的性能测试,或者造数据,比较适用于单一URL的测试
ab判断成功与否只通过2xx的状态码作为依据,不接收服务器的返回值,但lr却接收服务器完整的返回。所以在同样的响应时间下,ab测试支持的并发数会大于lr,tps也会大于lr。
ab运行并发的时候和所在运行机器上的cpu颗数有关,越多则并发越大。所以在linux下支持的并发大于在Windows下
大并发下数据不准,更多的是看ab本身的性能了而不是服务端的性能