Bad performance of nginx with Tomcat vs. Apache with Tomcat

Chang Song changsong at me.com
Fri Sep 4 01:51:59 MSD 2009


Istvan.
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 :)
>
> Regards,
> Istvan
>
> 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 Tomcat.
> 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 are
>     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
>
> Chang
>
>
>
>
>
>
>
> -- 
> the sun shines for all

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx/attachments/20090904/35e037f7/attachment.html>


More information about the nginx mailing list