i am performing some httperf tests against apache and nginx. something i
noticed that piqued my interest were the consistency of response times
(0.4 ms each run regardless of number of request, much lower than apache
in all cases) and network I/O (consistently higher than apache
regardless of number of request). it also uses less cpu than apache and
doesn’t nearly drive up the load.
are these normal results? is there a mechanism in nginx that keeps the
response times low and consistent? also, is it normal that it uses more
network I/O? if so, what is the cause? to me it would seem like that it
uses more bandwidth to respond to the same number of requests which
seems inefficient.
please correct me if i am wrong. i am just trying to understand the core
differences in how nginx works in comparison to apache and why i would
see these performance differences.
thanks for the help.
-joe
please excuse my typo. regarding network I/O nginx uses consistently
lower I/O than apache.
regardless i am curious about how it processes requests differently to
obtain lower response times and network I/O.
thanks for any help you can provide.
-Joe
On Thu, Feb 28, 2008 at 08:24:24PM -0600, Joe W. wrote:
please excuse my typo. regarding network I/O nginx uses consistently
lower I/O than apache.
regardless i am curious about how it processes requests differently to
obtain lower response times and network I/O.
How do you measure network I/O ?
In short, Apache and nginx use different model for processing requests.
Apache processes connection in one process or thread while nginx
processes
thousand connections in one process/thread using scaleable methods such
as kqueue/epoll/etc.
I used httperf to give me the network I/O (KB/s) and response times. I
could probably produce the sar data from each if you would like it. I
assume the response times are due to Nginx not needing to take time to
start up another process/thread?
Thanks.
-Joe
On Fri, Feb 29, 2008 at 11:05:37AM -0600, Joe W. wrote:
I used httperf to give me the network I/O (KB/s) and response times. I
could probably produce the sar data from each if you would like it. I
assume the response times are due to Nginx not needing to take time to
start up another process/thread?
So nginx’s network I/O is for example, 20M/s, while Apache’s - 100M/s ?
In this case network I/O and response times are the same things.
The lesser response times, the more you can get for the same time.
Apache usually does not start new processes, it has some number of
already preforked processes ready to handle requests.
Understood, thanks for the insight. The Nginx was consistently 10 to 15%
lower than Apache, such as 98MB/s versus 110MB/s.
If you would like to see my results for httperf you can download the
spreadsheet here:
http://www.joeandmotorboat.com/wp-content/files/bench_results-comb-static.ods
I also posted about it here:
http://www.joeandmotorboat.com/2008/02/28/apache-vs-nginx-web-server-performance-deathmatch/
Let me know what you think.
Thanks.
-Joe
You are using a tiny file (robots.txt) for your measurements, which
means HTTP
headers constitute large part of the traffic and may well account for
10-15%
difference.
Denis.
Thanks for the info Denis.
-joe