ab is erroring out with apr_socket_recv: Connection refused (61)

I am testing eventlet out, and I am getting this error:

~>ab -n 10 -c 1 http://localhost:8090/
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 localhost (be patient)...apr_socket_recv: Connection reset by peer (54)
Total of 2 requests completed

The website works at localhost:8090/ and returns 200 OK.

I had the same issue with tomcat, again the website worked fine.

What could the issue be?

43053 次浏览

I found using 127.0.0.1 rather than localhost worked:

ab -n 10 -c 1 http://127.0.0.1:8090/

Update: May have been a bug in ab: https://groups.google.com/forum/#!msg/nodejs/TZU5H7MdoII/yivu0d4LMaAJ

There is a patch for this bug, I followed the steps of this guide and it seems to work for me now in Lion.

New version's apache have fix the issue. Only have to rebuild ab.

Try to download latest package from http://archive.apache.org/dist/

Have to patch apache and build a new ab.

$ wget http://archive.apache.org/dist/httpd/httpd-2.3.16-beta.tar.bz2
$ tar jxvf httpd-2.3.16-beta.tar.bz2
$ cd httpd-2.3.16-beta
$ ./configure

Only have to build ab, which located in support folder.

$ cd support
$ make
...
$ ./ab -n 10 -c 1 http://localhost:8090/

If your apache is very old, then patch it and build as above.

$ wget https://www.rtfm.ro/download/patches/ab.patch --no-check-certificate
$ patch -p0 < ./ab.patch

Done.

add the -r option which means Don't exit on socket receive errors. At times you might change the default ulimit size value. ab -r -n 10 -c 1 http://localhost:8090/

Another related bug that is still present in ab (apache-2.4.29) is that it takes just the first result from getaddrinfo. It's probably this bug that is mentioned by Jürgen Strobel in a comment. Let's say you have /etc/hosts that goes like this:

127.0.0.1   localhost.localdomain   localhost
::1     localhost.localdomain   localhost

The first result returned by getaddrinfo for localhost is ::1. So ab tries to connect over IPv6 and fails. The workaround is to use 127.0.0.1: ab -n 10 127.0.0.1/. Or reorder the lines. Though, in my case it says:

Benchmarking localhost (be patient)...apr_socket_recv: Connection refused (111)