Bad performance of nginx with Tomcat vs. Apache with Tomcat
leccine at gmail.com
Fri Sep 4 02:19:14 MSD 2009
well I was able to reach about 50K req/s on a single node with nginx with
tuning linux/tcp stack/nginx and i learned one thing:
measure instead of guess
(and as a side effect: debug instead of guess.)
So, if i were you i would start dstat(dstat -cgilpymn) on that host and see
the different elements of you system, enable debug logging, even stracing
This is the way I think.
On Thu, Sep 3, 2009 at 10:51 PM, Chang Song <changsong at me.com> wrote:
> It didn't really matter what config I used.
> I tried all combinations of
> worker_process (2-512)
> worker_connections (512-16000)
> accept_mutex (on/off)
> tcp_nopush (on/off)
> tcp_nodelay (on/off)
> proxy_buffer* (various sizes)
> and other proxy related parameters you can imagine.
> The one I showed you has the best performance
> The following showed the best performance across the board
> worker_process 2; # since we have 2 core machine
> worker_connections 16000;
> accept_mutex off;
> max_connections 256; # ey-balancer (tomcat had 512 threads)
> everything else default
> Thank you.
> On Sep 3, 2009, at 4:26 PM, István wrote:
> I think it would be beneficial to show us your nginx config :)
> On Thu, Sep 3, 2009 at 5:50 AM, Chang Song <changsong at me.com> wrote:
>> Sometime ago, I posted an message about Nginx performance when paired with
>> We recently did extensive in-house testing of various workload against
>> Nginx with Tomcat vs Apache vs Tomcat.
>> Apache wins hands down.
>> Here's the basic setup
>> 1. Nginx (2 proc/8192 connections) -> http/1.0 -> Tomcat (HTTP connector)
>> 2. Apache (512 prefork) -> AJP -> Tomcat (AJP)
>> Both KeepAlive off (we don't use KeepAlive due to L4 switch)
>> The physical server is 2 core Intel Xeon, which is typical web server
>> config here.
>> We have three grinder 3.2 load generators.
>> We tested 4K and 20K Tomcat simple HTML file, 20K simple HTML with
>> intentional 10% 200ms
>> sleep in Tomcat serving (emulate slow DB query), etc.
>> Every single case, Apache wins by at least 10-15%.
>> Throughput and response time.
>> Nginx uses a bit less CPU cycles (10-20%), but it is not able drive Tomcat
>> to 100% CPU.
>> Here's my take on this performance problem.
>> 1. Lack of AJP support, which is an optimized HTTP protocol
>> First of all, this is a serious bottleneck.
>> * AJP has much less communication overhead than HTTP
>> 2. Lack of HTTP KeepAlive support for proxy
>> * Lack of AJP may be compensated with HTTP keepalive support since there
>> at least twice the number of TIME_WAIT sockets (connection
>> establishment mean time
>> is at least twice - three times slower than that of Apache)
>> 3. Lack of connection pooling
>> * Ey-balancer makes things a bit easier, response times are stable, but
>> still the same
>> average TPS and response time.
>> 4. There seems to be a huge bug in connection management code
>> Two mix of transactions: 20K HTML serving and 8K HTML with intentional
>> 200ms delay in Tomcat logic
>> With Apache, 20K HTML serving took 36 ms on average while 8K HTML took
>> 258 ms
>> With Nginx, 20K HTML serving took 600 ms on average while 8K HTML took
>> 817 ms
>> I really cannot explain these difference. Not even TCP connection
>> overhead or lack of AJP.
>> My questions is "should I abandon nginx at this point"?
>> I know nginx is great proxy and static file server but I cannot prove my
>> point with Tomcat over and over again.
>> Thank you
> the sun shines for all
the sun shines for all
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the nginx