一、ApacheBench
> 安装ab压力测试软件
1 2 3 4 5 6 7 |
|
1、压力测试的几个概念:
|
2、ab是apache自带的压力测试工具。
ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。
在带宽不足的情况下,最好是本机进行测试,建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大或带宽不足)。
ab软件单机模拟: 0-20000 并发的能力。
3、ab的帮助
|
4、ab使用方法
|
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 |
|
提示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 |
|
1 |
|
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 |
|
4)带参数的压力测试示例
1 |
|
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是ipv6中的IP地址,ipv4为127.0.0.1。
如果真是版本缺陷,我还是建议更换低版本的ab来使用。