Nginx TCP Delays

Khalid Shaikh khalid.j.shaikh at gmail.com
Mon Sep 21 12:53:49 MSD 2009


Maxim,
Great advice.  Give me 24 hours to test it out.

The specific requests I am doing /test.html and /status do not hit php-fpm
and I verified that by turning it off and hitting those URLs for responses.

I do not think CPU is the issue, but I still value the advice and will go
through the variables and see if I get improvements.

Best,
Khalid

On Mon, Sep 21, 2009 at 1:46 AM, Maxim Dounin <mdounin at mdounin.ru> wrote:

> Hello!
>
> On Sun, Sep 20, 2009 at 10:47:21PM -0700, Khalid Shaikh wrote:
>
> > We are using Nginx on this web server.  Look at the # of reading &
> writing
> > requests.  a curl http://localhost/test.html can take up to 45 seconds.
> > Can anyone help?
> >
> > Using telnet I can see that basically the Nginx server is taking time to
> get
> > to the TCP connection that I initiated.
> >
> > This happens only during peak times of the web site.
>
> Looks like either nginx has no CPU time due to fastcgi sitting on
> the same machine, or nginx workers are blocked on disk.  You may find
> out actual reason by examining state of nginx worker processes in
> top.
>
> If the problem is CPU time you shuld just add some to nginx, e.g.
> by using worker_priority directive.  Reducing load on fastcgi
> (e.g. by using fastcgi_cache) may help too.
>
> If the problem is disk load, you may try the following:
>
> 1. Set sendfile_max_chunk to something like 128k or 256k.  This
> should prevent fast clients from blocking nginx in sendfile() for
> too long.
>
> 2. Don't use sendfile at all and use small number of big
> output_buffers (e.g. output_buffers 1 256k;).  This should reduce
> number of disk accesses (and seeks) at cost of not using
> sendfile() - e.g. some additional CPU usage.
>
> 3. If fastcgi returns big responses that are buffered to disk, try
> raising fastcgi_buffers and/or setting fastcgi_max_temp_file_size
> 0;.  This should prevent nginx from going to disk at cost of not
> releasing fastcgi connection as early as possible.  Also you
> should consider finding the source of such responses and using
> X-Accel-Redirect instead if it's possible.
>
> 4. Consider using aio.  Though aio on Linux isn't something
> generally usable, but it may help anyway.  Note that some bugs may
> be still here, it's expiremental feature.
>
> Maxim Dounin
>
> >
> > Active connections: 8467
> > server accepts handled requests
> >  380771 380771 835836
> > Reading: 75 Writing: 1497 Waiting: 6895
> > http://67.159.60.59/status      45.03 seconds
> >
> > I've attached the nginx.conf
> >
> > user www-data www-data;
> > worker_processes 32;
> >
> > error_log  /var/www/log/nginx_error.log;
> > pid        /var/run/nginx.pid;
> >
> > events {
> >   worker_connections  10024;
> > }
> >
> > http {
> >   include       /etc/nginx/mime.types;
> >   default_type  application/octet-stream;
> >
> >   sendfile         on;
> >   tcp_nopush       on;
> >   tcp_nodelay      on;
> >
> >   server {
> >     listen       80;
> >     server_name  xs.to;
> >     root   /var/www/xs;
> >     error_page  404 index.php;
> >     error_page   500 502 503 504  index.php;
> >     access_log off;
> >
> >     location / {
> >       root   /var/www/xs;
> >       index  index.php default.php;
> >       rewrite  ^/albums/(.*)$  /albums/showalbum.php?$1?  last;
> >       rewrite  ^/community/(.*)$  /community.php?$1?  last;
> >       error_page  404 index.php;
> >       error_page   500 502 503 504  index.php;
> >     }
> >
> >     location /status {
> >       stub_status on;
> >       access_log off;
> >     }
> >
> >     location ~ .php$ {
> >       fastcgi_pass 127.0.0.1:8888;
> >       fastcgi_index index.php;
> >       fastcgi_intercept_errors on;
> >       error_page  404 index.php;
> >       error_page   500 502 503 504  index.php;
> >       fastcgi_param  SCRIPT_FILENAME    /var/www/xs/$fastcgi_script_name;
> >       include /etc/nginx/fastcgi_params;
> >     }
> >
> >     location ~* ^.+.(jpg|jpeg|gif|tiff|png|bmp|ico|fav|html)$ {
> >       access_log        off;
> >       expires           30d;
> >     }
> >   }
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx/attachments/20090921/051ad3c8/attachment.html>


More information about the nginx mailing list