All workers in 'D' state using sendfile

Maxim Dounin mdounin at
Mon Jun 10 10:55:22 UTC 2013


On Sun, Jun 09, 2013 at 07:24:49PM +0430, Host DL wrote:

> Hello Maxim,
> Thanks for your response, and sorry that I am new to mailing list and my
> 1st message may was not very clear to you
> I've already read all posts in this conversation and all tuning options has
> been tested
> I'm using 8x 2TB SATA ENT in RAID10 level + 64G RAM on my box
> CentOS 5.9 x64_84 / 2.6.18-348.6.1.el5
> nginx.conf:
> worker_priority -10;
> worker_processes 64;
> worker_rlimit_nofile 20000;
> events {
>     worker_connections  2048;
>     use epoll;
>     worker_aio_requests 128;
> }
> http {
>     sendfile     off;
>     tcp_nopush     on;
>     tcp_nodelay on;
>     aio on;
>     directio    2m;
>     #directio_alignment 4k;
>     output_buffers 1 1m;
>     keepalive_timeout  15;
>     ......
> }
> During the peak time connections will reach up to 14-15K in total and more
> than 1Gbit/s outgoing throughput
> Please note that the server was stable with about 12K connections in the
> peak time and about 1-1.1Gbit/s throughput but after adding another VH with
> about 2-3K connections it seems that server is unable to handle the request
> properly at the peak time
> Its expected the throughput to exceed the previous ~1.1Gbit/s rate but it
> doesn't, Even it doesn't reach to 1Gbit/s while the connections are now
> getting more and bigger
> During every peak time the LA will each to the number of nginx workers ( 64
> for my current config ) and will stay at the same rate to the end of peak
> time, all processes are in D state and the interesting thing, memory is not
> being used fully and it may push about 30-40G with about 20-30% I/O wait

Main problem with AIO on Linux is that it requires directio to 
actually work asynchronously.  I would assume you've just reached 
a critical number of synchronous requests to disks as due to 
"directio 2m" in your config (and that's why you see all workers 
in D state).  Try tuning directio to a lower value to see if it 

Note well: memory is not used for filesystem cache with directio, 
so there is no surprise it's not being used fully.

Maxim Dounin

More information about the nginx mailing list