Using ab to benchmark nginx: Connection reset by peer (54)

I recently updated to nginx 1.0.8 and tried to benchmark performance for cached dynamic pages (initially served by a Django app via proxy_pass) and for static pages. In both cases, nginx will not serve more than 3 or 4 requests (even without concurrent connections), so ab almost immediately reports:

apr_socket_recv: Connection reset by peer (54)

It is only when choosing a maximum of 4 (or fewer) requests that ab finishes successfully.

Why is that? I tried increasing the number of worker processes (no luck), but I assume that nginx should be capable of serving more than 4 requests without tweaking any configuration variable. Could it be that I accidentally triggered some sort of DOS protection mechanism?


Solution 1:

I was running the same issue with ab running locally testing against a simple Node.JS app. A workaround I found was using ab -r option that indicate Don't exit on socket receive errors.

But the underlying cause of this error is limited number of open sockets that you can have in you box. If you are using OSx you may refer to this answer to set higher numbers to this limits:

How to increase limits on sockets on osx for load testing