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本身的性能了而不是服务端的性能

原文地址:https://www.cnblogs.com/Darrenblog/p/8468790.html