apachebench(ab)压测遇到问题的解决方案记录
问题1:apr_socket_recv: Connection timed out (110)
问题分析:从ab.c源码可以看到,如果没有设置-r参数,ab在socket接收到错误后,apr_err会使用exit即刻退出。
解决方案:ab使用时加上-r参数,如:ab -r -n200000 -c10000 http://xxxx
附ab.c的部分源码(apache/support/ab.c,apache版本不同,这里的源代码行数可能不同)
1398 if (recverrok) {
1399 bad++;
1400 close_connection(c);
1401 if (verbosity >= 1) {
1402 char buf[120];
1403 fprintf(stderr,"%s: %s (%d)\n", "apr_socket_recv", apr_strerror(status, buf, sizeof bu f), status);
1404 }
1405 return;
1406 } else {
1407 apr_err("apr_socket_recv", status);
1408 }
问题2:apr_socket_recv: Connection reset by peer (104)
解决方案同问题1,在遇到错误时,加-r参数,避免即刻退出
问题3:apr_pollset_poll: The timeout specified has expired (70007)
问题分析:从ab.c源码可以看到,在socket等待server的响应超过超时时间(-s可指定,未指定默认30s),则调用apr_err退出。
解决方案:找到如下(1758,1759)两行代码,注释掉,重新编译apache/support目录(可单独support,无需重新编译apache)
1755 do {
1756 status = apr_pollset_poll(readbits, aprtimeout, &n, &pollresults);
1757 } while (APR_STATUS_IS_EINTR(status));
1758 if (status != APR_SUCCESS)
1759 apr_err("apr_pollset_poll", status);
问题四:
使用apache ab做压力测试时出现apr_poll:The timeout specified has expired错误
使用apache 的ab做压力测试时,当压力过大,例如请求1000000次,在没有执行完就报apr_poll:The timeout specified has expired错误,解决办法,使用-k(发送keep-alive指令到服务器端),同时修改web服务器下的/etc/sysctl.conf,在里 面添加如下内容:
net.ipv4.netfilter.ip_conntrack_max = 3276800
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768 61000
如果已经存在,试着加大net.ipv4.netfilter.ip_conntrack_max的值,然后使用
sysctl -p /etc/sysctl.conf
问题分析:从ab.c源码可以看到,如果没有设置-r参数,ab在socket接收到错误后,apr_err会使用exit即刻退出。
解决方案:ab使用时加上-r参数,如:ab -r -n200000 -c10000 http://xxxx
附ab.c的部分源码(apache/support/ab.c,apache版本不同,这里的源代码行数可能不同)
1398 if (recverrok) {
1399 bad++;
1400 close_connection(c);
1401 if (verbosity >= 1) {
1402 char buf[120];
1403 fprintf(stderr,"%s: %s (%d)\n", "apr_socket_recv", apr_strerror(status, buf, sizeof bu f), status);
1404 }
1405 return;
1406 } else {
1407 apr_err("apr_socket_recv", status);
1408 }
问题2:apr_socket_recv: Connection reset by peer (104)
解决方案同问题1,在遇到错误时,加-r参数,避免即刻退出
问题3:apr_pollset_poll: The timeout specified has expired (70007)
问题分析:从ab.c源码可以看到,在socket等待server的响应超过超时时间(-s可指定,未指定默认30s),则调用apr_err退出。
解决方案:找到如下(1758,1759)两行代码,注释掉,重新编译apache/support目录(可单独support,无需重新编译apache)
1755 do {
1756 status = apr_pollset_poll(readbits, aprtimeout, &n, &pollresults);
1757 } while (APR_STATUS_IS_EINTR(status));
1758 if (status != APR_SUCCESS)
1759 apr_err("apr_pollset_poll", status);
问题四:
使用apache ab做压力测试时出现apr_poll:The timeout specified has expired错误
使用apache 的ab做压力测试时,当压力过大,例如请求1000000次,在没有执行完就报apr_poll:The timeout specified has expired错误,解决办法,使用-k(发送keep-alive指令到服务器端),同时修改web服务器下的/etc/sysctl.conf,在里 面添加如下内容:
net.ipv4.netfilter.ip_conntrack_max = 3276800
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768 61000
如果已经存在,试着加大net.ipv4.netfilter.ip_conntrack_max的值,然后使用
sysctl -p /etc/sysctl.conf
热门话题 · · · · · · ( 去话题广场 )
- 神奇爱好大赏 3.2万次浏览
- 自我意识悄然觉醒的时刻 2096次浏览
- 成长过程中最叛逆的时光 290次浏览
- 用旅行的方式逛家乡 新话题
- 情绪也需要“断舍离” 1150次浏览
- 你可以按下暂停键 576次浏览