使用Apache Benchmark做压力测试遇上的5个常见问题
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/50/ ]
这一篇文章主要记录我在使用Apache Benchmark(一下检测ab)做网站压力测试的过程中,遇到的一些问题以及解决办法,方便日后使用.
这一篇文章主要记录我在使用Apache Benchmark(一下检测ab)做网站压力测试的过程中,遇到的一些问题以及解决办法,方便日后使用。
1)当使用ab做压力测试,执行类似的命令:
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的值。
#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
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'
ab -H 'Accept-Encoding: gzip' www.xxx.com/
4)带参数的压力测试示例
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 localhost
::1是ipv6中的IP地址,ipv4为127.0.0.1。
如果真是版本缺陷,我还是建议更换低版本的ab来使用。
再遇上其他问题会继续更新
我来说两句: