zoukankan      html  css  js  c++  java
  • 使用Apache Benchmark做压力测试遇上的5个常见问题

    这一篇文章主要记录我在使用Apache Benchmark(一下检测ab)做网站压力测试的过程中,遇到的一些问题以及解决办法,方便日后使用.

    这一篇文章主要记录我在使用Apache Benchmark(一下检测ab)做网站压力测试的过程中,遇到的一些问题以及解决办法,方便日后使用。

    1)当使用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:WindowsSystem32driversetchosts,添加下边的对应关系。

    1
    ::1             localhost

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

  • 相关阅读:
    Vue自定义过滤器
    Vue自带的过滤器
    vue单页面程序
    Angular 通过 $http.post 写入本地 JSON 文件
    Windows下搭建PHP开发环境
    在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
    jQuery编程的最佳实践
    微信小程序 TLS 版本必须大于等于1.2问题解决
    linux批量压缩当前目录中文件后,删除原文件
    docker 删除镜像
  • 原文地址:https://www.cnblogs.com/saryli/p/6640082.html
Copyright © 2011-2022 走看看