I know this is not directly a programming question, but people on stackoverflow seems to be able to answer any question.
I have a server running Centos 5.2 64 bit. Pretty powerful dual core 2 server with 4GB memory. It mostly serves static files, flash and pictures. When I use lighttpd it easily serves over 80 MB/sec, but when I test with nginx it drops down to less than 20 MB/sec.
My setup is pretty straight forward, uses the default setup file, and I have added the following
user lighttpd;
worker_processes 8;
worker_rlimit_nofile 206011;
#worker_rlimit_nofile 110240;
error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
}
http {
....
keepalive_timeout 2;
....
}
And I thought nginx was supposed to be at least as powerful, so I must be not doing something.
The following minimum hardware specifications are required for each node running NGINX Controller: RAM: 8 GB RAM. CPU: 8-Core CPU @ 2.40 GHz or similar.
By default, the configuration file is named nginx. conf and placed in the directory /usr/local/nginx/conf , /etc/nginx , or /usr/local/etc/nginx .
Proxy buffering is enabled by default in NGINX (the proxy_buffering directive is set to on ). Proxy buffering means that NGINX stores the response from a server in internal buffers as it comes in, and doesn't start sending data to the client until the entire response is buffered.
When you reload your nginx (kiil -HUP) you'll get something like this in your error logs
2008/10/01 03:57:26 [notice] 4563#0: signal 1 (SIGHUP) received, reconfiguring 2008/10/01 03:57:26 [notice] 4563#0: reconfiguring 2008/10/01 03:57:26 [notice] 4563#0: using the "epoll" event method 2008/10/01 03:57:26 [notice] 4563#0: start worker processes 2008/10/01 03:57:26 [notice] 4563#0: start worker process 3870
What event method is your nginx compiled to use?
Are you doing any access_log'ing ? Consider adding buffer=32k, which will reduce the contention on the write lock for the log file.
Consider reducing the number of workers, it sounds counter intuitive, but the workers need to synchronize with each other for sys calls like accept(). Try reducing the number of workers, ideally I would suggest 1.
You might try explicitly setting the read and write socket buffers on the listening socket, see http://wiki.codemongers.com/NginxHttpCoreModule#listen
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With