I am benchmarking nginx 0.7.65 with httperf simulating a typical user
visit which lasts max 10 seconds including pause time (i.e. hit page,
grab inline elements such as images/css/js, pause, hit another page,
httperf is running from two separate client machines both within 10ms
ping from the webserver. While httperf is running, I am also browsing
the site on my workstation (200ms from the webserver) to see how it
feels for a user.
When I run the benchmark with keepalive_timeout 0, nginx is very very
fast and accepts new connections instantly. Concurrent connections
never goes above 5 since the benchmark clients are so close to the
When I run the benchmark with keepalive_timeout 65, nginx is very slow
(5-20 seconds delay) to accept new connections as soon as it reaches
1500 concurrent connections. It plateaus here: it completes all the
requests but it never exceeds approximately 1500 concurrent connections.
Is this normal? Everywhere I read tells me to leave keepalive on and it
shouldn’t make any difference in nginx. So is this a keepalive problem,
or a problem handling >1500 concurrent connections? What should I look
at to fix it?
The box is 97% idle and it is not waiting on disk.
OS is Linux 2.6 with fs.file-max=65535 also before starting nginx,
ulimit -n 65535 is called (from /etc/init.d/nginx)
There are no errors at all in the nginx error.log. Not for file
descriptors, or anything. I watched error.log at “info” logging level
and the only messages at all are the keepalive connection closing
messages, which I believe are normal.
The nginx.conf has (amongst other things):
worker_processes 4; # it’s quad core machine
Posted at Nginx Forum: