设为首页 收藏本站
查看: 453|回复: 0

[经验分享] centOS环境ab性能测试功能

[复制链接]

尚未签到

发表于 2018-4-28 08:29:33 | 显示全部楼层 |阅读模式
  1.ab原理
  ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
  ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机
  

  2.ab的安装
  yum install httpd-tools
  

  3.ab参数说明
  ab --help

  下面我们对这些参数,进行相关说明。如下:
  -n在测试会话中所执行的请求个数。默认时,仅执行一个请求。
  -c一次产生的请求个数。默认是一次一个。
  -t测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
  -p包含了需要POST的数据的文件。
  -P对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
  -T POST数据所使用的Content-type头信息。
  -v设置显示信息的详细程度-4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。
  -V显示版本号并退出。
  -w以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
  -i执行HEAD请求,而不是GET。
  -x设置
  属性的字符串。
  -X对请求使用代理服务器。
  -y设置
  属性的字符串。
  -z设置
  属性的字符串。
  -C对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。
  -H对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,"Accept-Encoding:zip/zop;8bit")。
  -A对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
  -h显示使用方法。
  -d不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
  -e产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
  -g把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
  -i执行HEAD请求,而不是GET。
  -k启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
  -q如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
  

  4.ab性能指标
  在进行性能测试过程中有几个指标比较重要:
  1、吞吐率(Requests per second)
  服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
  记住:吞吐率是基于并发用户数的。这句话代表了两个含义:
  a、吞吐率和并发用户数相关
  b、不同的并发用户数下,吞吐率一般是不同的
  计算公式:总请求数/处理完成这些请求数所花费的时间,即
  Request per second=Complete requests/Time taken for tests
  必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。
  2、并发连接数(The number of concurrent connections)
  并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
  3、并发用户数(Concurrency Level)
  要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。在HTTP/1.1下,IE7支持两个并发连接,IE8支持6个并发连接,FireFox3支持4个并发连接,所以相应的,我们的并发用户数就得除以这个基数。
  4、用户平均请求等待时间(Time per request)
  计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:
  Time per request=Time taken for tests/(Complete requests/Concurrency Level)
  5、服务器平均请求等待时间(Time per request:across all concurrent requests)
  计算公式:处理完成所有请求数所花费的时间/总请求数,即:
  Time taken for/testsComplete requests
  可以看到,它是吞吐率的倒数。
  同时,它也等于用户平均请求等待时间/并发用户数,即
  Time per request/Concurrency Level
  

  5.ab测试实例
  ab -c 10 -n 100 http://127.0.0.1/index.php
  -c10表示并发用户数为10
  -n100表示请求总数为100
  这行表示同时处理100个请求并运行10次index.php文件
  Server Software:        Apache/2.0.54
  //平台apache 版本2.0.54
  Server Hostname:        127.0.0.1
  //服务器主机名
  Server Port:            80
  //服务器端口
  Document Path:          /index.html.zh-cn.gb2312
  //测试的页面文档
  Document Length:        1018 bytes
  //文档大小
  Concurrency Level:      1000
  //并发数
  Time taken for tests:   8.188731 seconds
  //整个测试持续的时间
  Complete requests:      1000
  //完成的请求数量
  Failed requests:        0
  //失败的请求数量
  Write errors:           0
  

  Total transferred:      1361581 bytes
  //整个场景中的网络传输量
  HTML transferred:       1055666 bytes
  //整个场景中的HTML内容传输量
  Requests per second:    122.12 [#/sec] (mean)
  //大家最关心的指标之一,相当于 LR 中的 每秒事务数 ,后面括号中的 mean 表示这是一个平均值
  Time per request:       8188.731 [ms] (mean)
  //大家最关心的指标之二,相当于 LR 中的 平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值
  Time per request:       8.189 [ms] (mean, across all concurrent requests)
  //每个请求实际运行时间的平均值
  Transfer rate:          162.30 [Kbytes/sec] received
  //平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
  Connection Times (ms)
  min mean[+/-sd] median   max
  Connect:        4 646 1078.7     89    3291
  Processing:   165 992 493.1    938    4712
  Waiting:      118 934 480.6    882    4554
  Total:        813 1638 1338.9   1093    7785
  //网络上消耗的时间的分解,各项数据的具体算法还不是很清楚
  Percentage of the requests served within a certain time (ms)
  50%   1093
  66%   1247
  75%   1373
  80%   1493
  90%   4061
  95%   4398
  98%   5608
  99%   7368
  100%   7785 (longest request)
  //整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于1093 毫秒,60%的用户响应时间小于1247 毫秒,最大的响应时间小于7785 毫秒
  由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数
  

  6.报错如下:
  报错1:apr_socket_recv: Connection reset by peer (104)
  报错2:[crit] 4503#0: accept4() failed (24: Too many open files)
  以下方法没解决:
  一看就知道系统对打开文件数目做了限制,用下面命令
  ulimit -n    查看当前用户的
  命令查看了一下,结果显示文件打开数目限制为1024,我们需要让这个数字更大一些,好让我们的网站访问并发更高一些。
  下面是修改 ulimit 限制数的方法:
  1.首先你得修改nginx.conf配置文件,在定义error.log日志路径的位置添加一行
  worker_rlimit_nofile 65535;
  2.在/etc/profile文件最后面添加下面内容
  ulimit -n 65535
  3.在/etc/security/limits.conf文件最后面添加下面内容
  * soft nofile 65535
  * hard nofile 65535
  

  7.shell封装ab的测试脚本

  #!/bin/sh
  

  total_request=10000
  concurrency=100
  times=1
  cmd_idx=1
  param_count=$#
  

  while [ $cmd_idx -lt $param_count ]
  do
  cmd=$1
  shift 1 #remove $1
  case $cmd in
  -n)
  total_request=$1
  shift 1;;
  -c)
  concurrency=$1
  shift 1;;
  -t)
  times=$1
  shift 1;;
  *)
  echo "$cmd, support parameter: -n, -c, -t";;
  esac
  cmd_idx=`expr $cmd_idx + 2`
  done
  

  url=$1
  if [ $url = '' ];then
  echo 'the test url must be provided...'
  exit 2
  fi
  

  echo "Total Request: $total_request, Concurrency: $concurrency, URL: $url, Times: $times"
  

  ab_dir=/usr/bin
  ab_cmd="$ab_dir/ab -n $total_request -c $concurrency $url"
  

  echo $ab_cmd
  idx=1
  rps_sum=0
  max=-1
  min=99999999
  while [ $idx -le $times ]
  do
  echo "start loop $idx"
  result=`$ab_cmd | grep 'Requests per second:'`
  result=`echo $result | awk -F ' ' '{ print $4 }' | awk -F '.' '{ print $1 }'`
  rps_sum=`expr $result + $rps_sum`
  if [ $result -gt $max ];then
  max=$result
  fi
  if [ $result -lt $min ];then
  min=$result
  fi
  idx=`expr $idx + 1`
  done
  echo "avg rps: "`expr $rps_sum / $times`
  echo "min rps: $min"
  echo "max rps: $max"
  

  输入:

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-452926-1-1.html 上篇帖子: Centos 升级MySQL版本或者Yum安装Mysql5.6 下篇帖子: centos 的yum仓库搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表