一、ab

0、安装ab压力测试软件

[root@a2 conf]# yum install httpd-tools -y#查看版本
[root@a2 conf]# ab -V
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/

  

1、压力测试的几个概念:

吞吐率(Requests per second)
概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests并发连接数(The number of concurrent connections)
概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。并发用户数(The number of concurrent users,Concurrency Level)
概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)服务器平均请求等待时间(Time per request: across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即
Time per request / Concurrency Level

2、ab是apache自带的压力测试工具。

ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。

Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。 
ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。

在带宽不足的情况下,最好是本机进行测试,建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大或带宽不足)。

ab软件单机模拟: 0-20000 并发的能力。

3、ab的帮助

Options做下解释吧:
-n即requests,用于指定压力测试总共的执行次数。
-c即concurrency,用于指定压力测试的并发数。
-t即timelimit,等待响应的最大时间(单位:秒)。
-b即windowsize,TCP发送/接收的缓冲大小(单位:字节)。
-p即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。
-u即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。
-T即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。
-v即verbosity,指定打印帮助信息的冗余级别。
-w以HTML表格形式打印结果。
-i使用HEAD请求代替GET请求。
-x插入字符串作为table标签的属性。
-y插入字符串作为tr标签的属性。
-z插入字符串作为td标签的属性。
-C添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。
-H添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。
-A添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。
-P添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。
-X指定使用的代理服务器和端口号,例如:"126.10.10.3:88"。
-V打印版本号并退出。
-k使用HTTP的KeepAlive特性。
-d不显示百分比。
-S不显示预估和警告信息。
-g输出结果信息到gnuplot格式的文件中。
-e输出结果信息到CSV格式的文件中。
-r指定接收到错误信息时不退出程序。
-h显示用法信息,其实就是ab -help。

4、ab使用方法

压测块景设置:
ab -n 800 -c 800  http://192.168.0.10/
(-n发出800个请求,-c模拟800并发,相当800人同时访问,后面是测试url)ab -t 60 -c 100 http://192.168.0.10/
在60秒内发请求,一次100个请求。 //如果需要在url中带参数,这样做
ab -t 60 -c 100 -T "text/plain" -p p.txt http://192.168.0.10/hello.html

5、压测记录

#install software
yum install httpd-tools -y

#test nginx

[root@aikt-n1 vhosts]# ab -n 10000 -c 10000 https://nlu.gree.com/unisound/v1/query
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 nlu.gree.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests

Server Software: nginx/1.8.0
Server Hostname: nlu.gree.com
Server Port: 443
SSL/TLS Protocol: TLSv1/SSLv3,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path: /unisound/v1/query
Document Length: 168 bytes       #HTTP响应数据的正文长度

Concurrency Level: 10000
Time taken for tests: 31.878 seconds   #所有这些请求处理完成所花费的时间 
Complete requests: 10000   # 完成请求数 
Failed requests: 0    #  失败请求数 
Write errors: 0
Non-2xx responses: 10001
Total transferred: 3170317 bytes   #网络总传输量
HTML transferred: 1680168 bytes    #HTML内容传输量 
Requests per second: 313.69 [#/sec] (mean)   #吞吐量-每秒请求数 
Time per request: 31878.099 [ms] (mean)    #服务器收到请求,响应页面要花费的时间 
Time per request: 3.188 [ms] (mean, across all concurrent requests)  #并发的每个请求平均消耗时间 
Transfer rate: 97.12 [Kbytes/sec] received     #平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

#网络上消耗的时间的分解:

整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间 
其中 50% 的用户响应时间小于 571 毫秒 
80 % 的用户响应时间小于 652 毫秒 
最大的响应时间小于 684 毫秒

Connection Times (ms)
min mean[+/-sd] median max
Connect: 7 28905 1349.2 28908 31192
Processing: 0 2630 1292.5 2632 4852
Waiting: 0 2622 1295.1 2621 4852
Total: 299 31535 326.5 31542 31582

Percentage of the requests served within a certain time (ms)
50% 31542
66% 31558
75% 31566
80% 31570
90% 31575
95% 31579
98% 31581
99% 31582
100% 31582 (longest request)

7、其它ab压测过程中遇到的一些问题

#当使用ab做压力测试,执行类似的命令:

1
ab -c 10 -n 10000 www.xxx.com/

提示apr_poll: The timeout specified has expired (70007)或者apr_socket_recv: Connection timed out (110)。

解决方法:添加-k参数,压力测试命令改为“ab -c 10 -n 10000 -k www.xxx.com/”,如果问题依旧,那就得从linux服务器配置着手。向/etc/sysctl.conf配置文件添加下边的设置,主要调整net.ipv4.netfilter.ip_conntrack_max或nf_conntrack_max的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#kernel2.6之前的内核版本添加如下配置:
net.ipv4.netfilter.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200
#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

1
sysctl -p /etc/sysctl.conf #不重起服务器,让新配置生效

2)在用ab测试的时候,只要出现Failed requests(失败的请求),就会出现三种失败的类型统计:Connect、Length、Exception。

Connect:向服务器发送请求失败;服务器连接失败;请求过程连接中断等。

Length:服务器返回的数据长度不一致,一般是对比Content-Length的值。

Exception:与服务器连接过程中发生意外错误。

这里主要说明一下Length,ab会把第一次成功返回的content-length作为基准,如果后面的请求返回的content-length跟第一次的不一样,它就会把这次请求当成是失败了。对于动态类型的网站,每次服务器返回的数据都不一定相同,所以如果ab提示的是Length错误,基本都可以忽略掉。

3)默认情况下,ab没有启用gzip压缩功能,所以压力测试的结果会跟实际情况有很大的偏差。要想让ab使用gzip压缩功能,得添加参数 -H 'Accept-Encoding: gzip'

1
ab -H 'Accept-Encoding: gzip' www.xxx.com/

4)带参数的压力测试示例

1
ab 'www.xxx.com/?a=1&b=2&c=3'

5)提示:Benchmarking 127.0.0.1 (be patient)... 使用了与请求的协议不兼容的地址(730047)

如果出现这个问题,那很可能是你使用了apache2.4.1或以上的版本。似乎从2.4.*开始,就使用了ipv6的协议,另一种角度来说,这可能是一个bug,所以检测一下是不是以前把ipv6的相关服务给关了。开始菜单->控制面板->任务管理器->服务->启用IP Helper。

再检查一下文件C:\Windows\System32\drivers\etc\hosts,添加下边的对应关系。

1
::1             localhost

::1是ipv6中的IP地址,ipv4为127.0.0.1。

如果真是版本缺陷,我还是建议更换低版本的ab来使用。

ab并发负载压力测试相关推荐

  1. Apache ab并发负载压力测试

    ab命令原理 Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力.  ab命令对发出负载的计算机要求很低,既不会占用 ...

  2. apache-ab并发负载压力测试(转)

    ab命令原理 Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力.  ab命令对发出负载的计算机要求很低,既不会占用 ...

  3. apache-ab 并发负载压力测试

    网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试工具目前最常见的有以下几种:ab.http_lo ...

  4. 使用Ab命令对Apache服务器进行负载压力测试

    使用Ab命令对Apache服务器进行负载压力测试 本站原创 [基于 署名-非商业使用-相同方式分享 2.5 协议,转载须注明链接] 本文所述Ab命令已由管理员在Debian.Centos两个系统中实际 ...

  5. 南柯服务器压力,性能/负载/压力测试 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    在面试测试人员的时候,这是一个很好的问题:你如何定义性能/负载/压力测试?在很多时候,人们都是将它们作为可互相替换的相同术语来使用,然而实际上他们之间的差异是比较大的.这个贴子是根据我自己的一些经验, ...

  6. loadrunner server压力测试 sql_LoadRunner进行负载压力测试

    第二章 使用 LoadRunner 进行负载 / 压力测试 2.1 本章概述 LoadRunner 是 MI 公司的自动化 client/server 性能测试工具. 它施压于你的整个的应用程序, 来 ...

  7. 软件测评师--第20小时 负载压力测试及故障定位于分析

    20-负载压力测试以及故障定位与分析 测试需求分析 系统测试实施两次性能测试 第一次为性能检测与故障定位 第二次为对调优之后的效果进行评估 局域网测试的主要内容 定位应用系统以及软.硬件支撑环境故障 ...

  8. 使用ab(apachebench)进行压力测试

    2019独角兽企业重金招聘Python工程师标准>>> 环境:WAMP(windows+apache+mysql+php) ab路径:E:\apache\bin\ab.exe 操作: ...

  9. 如何使用ab做接口压力测试

    一.什么是压力测试 压力测试是通过不断向被测系统施加"压力",测试系统在压力情况下的性能表现,考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在,也就是我们可以模拟巨 ...

最新文章

  1. 官宣!这些北京高校,正式进军雄安!
  2. visual basic.net 2019-Visual Basic 16.0新功能
  3. RHEL 5基础篇—常见系统启动类故障
  4. 整蛊偷快递的家伙!不愧是 NASA 工程师
  5. delphi 调用php接口_爱站权重查询 API 接口请求调用
  6. luogu P2216 [HAOI2007]理想的正方形 递推+ST表
  7. Centos6 使用yum快速搭建LAMP环境
  8. 「精品推荐」FEBS-Shiro 2.0,一款好用美观的权限管理系统
  9. java关闭窗口的6种方法
  10. svm多分类python代码_SVM算法的理解及其Python实现多分类和二分类
  11. 在树莓派下使用dlib及resnet的人脸检测及识别
  12. 遥感学习笔记(八)——遥感影像
  13. python中item是什么意思中文-python中的item
  14. 详解Decorator模式和vistor模式
  15. android 11.0 12.0设置app为默认浏览器
  16. 【亲测可行】error while loading shared libraries的解决方案
  17. 好青年雷军:奖学金都被我拿遍了
  18. 区块链之java(六) 合约监听
  19. 服务器 ip 网络共享 多服务器用同一个公网IP
  20. 最新网络安全工程师从入门到精通学习_网络安全入门

热门文章

  1. cupsd进程_linux pstree命令显示正在运行的进程的进程树状图
  2. html border 边距,css中border-sizing属性的用法
  3. 平安dms开发java_Spring DMS模板同步接收非持久用户消息丢失
  4. android开发需要root吗,已经2017年了,Android手机还需要root吗?
  5. python打包成exe_python 程序打包成exe程序
  6. 远程连接linux的mysql_【Linux开启mysql远程连接的设置步骤】 mysql开启远程连接
  7. eth java,一个轻量级的Java实现的ETH库
  8. vue 表单 input text
  9. SpringBoot POM说明
  10. python \__call__