Умирают воркеры

Maxim Dounin mdounin at mdounin.ru
Mon Mar 2 01:45:00 MSK 2009


Hello!

On Sun, Mar 01, 2009 at 10:18:43PM +0200, shaman wrote:

> Здравствуйте, Maxim.
> 
> На сервере с nginx наблюдается следующие проблемы:
> - скорость отдачи файлов предельно низкая (1-4 Кб/с)
> - умирают воркеры, в статистике висят тысячи "активных" соединений

Что показывает

netstat -an | grep ESTAB | wc -l

?

Вероятно все эти тысячи - честные клиентские соединения.

> Вот лог ошибок сразу после запуска с включенным sendfile:

[...]

> 2009/03/01 21:59:19 [crit] 80542#0: *636 connect() to 127.0.0.1:81 failed (54: Connection reset by peer) while connecting to upstream, client: 1.3.50.212, server: server.com, request: "GET /getfile.php?id=4588&access_key=9905ff3057599bbbedf7ba0e0c06b543&t=49aac8da&o=95CA75EF8AFDABBCE09C076530DBEDD394D674EF8AFDABA0FD9C056532C1E58792D576EE94FEC4E2B0C2191C4FDBEECF96CA&name=%D0%93%D0%B0%D1%80%D0%B8%2C%20%D1%82%D1%80%D0%B5%D0%BD%D0%B5%D1%80%20%D0%BF%D0%BE%20%D1%82%D0%B5%D0%BD%D0%BD%D0%B8%D1%81%D1%83_.part7.rar HTTP/1.0", upstream: "http://127.0.0.1:81/getfile.php?id=4588&access_key=9905ff3057599bbbedf7ba0e0c06b543&t=49aac8da&o=95CA75EF8AFDABBCE09C076530DBEDD394D674EF8AFDABA0FD9C056532C1E58792D576EE94FEC4E2B0C2191C4FDBEECF96CA&name=%D0%93%D0%B0%D1%80%D0%B8%2C%20%D1%82%D1%80%D0%B5%D0%BD%D0%B5%D1%80%20%D0%BF%D0%BE%20%D1%82%D0%B5%D0%BD%D0%BD%D0%B8%D1%81%D1%83_.part7.rar", host: "93.84.113.218", referrer: "http://93.84.113.218/"

Не справляется php.  Возможно - из-за перегрузки дисковой 
подсистемы, см. ниже.

[...]

> Вывод ps -alx | grep ngin (директива sendfile закомментирована) дает следующее:
> 
>  1004 46557   980   0   4  0 16384     0 sbwait IW    ??    0:00.00 ftpd: 1.3.54.205: user/wwwadmin: RETR nginx_error_lo
>     0 83026     1   1  20  0  7656     0 pause  SWs   ??    0:00.00 nginx: master process /usr/local/sbin/nginx
>    80 83037 83026   3  -4  0 215544 112508 getblk D     ??    0:02.21 nginx: worker process (nginx)
>    80 83040 83026   1  -4  0 302580 140104 getblk D     ??    0:02.19 nginx: worker process (nginx)
>    80 83043 83026   0  -8  0 102900 55372 biord  D     ??    0:02.17 nginx: worker process (nginx)

[...]

>     При включенной sendfile практически все воркеры висят в состоянии
>     biord (что это значит).

Это значит, что nginx упёрт в дисковую подсистему.  И при 
включённом sendfile, и при выключенном.  Смотрите из чего именно 
она состоит, как её можно разгрузить и/или ускорить.  Начать 
рекомендую с внимательного изучения вывода gstat.

Ну и количество шпинделей посчитать, и привести количество 
воркеров в соответствие.  Ибо 30 - это много, за исключением очень 
специфичных задач.  Таким количеством воркеров вы гарантировано 
загоните диски в случайное чтение, и не стоит удивляться 
результату.

>     И, наконец, привожу конфиг nginx:

[...]

>     output_buffers   32 256k;

32 буфера по 256k - не очень хороший выбор если раздаются большие 
файлы. Лучше начать с 

      output_buffers   1  1m;

и дальше играться размером (не количеством) в разные стороны.

> Помогите, пожалуйста, разобраться, что происходит.

См. выше.

Maxim Dounin

p.s. Где-то в архивах должен быть рассказ Игоря про рамблер кинозал, ну и 
видео соответствующего блиц-доклада на последнем highload'е где-то 
валяется.  Рекомендую ознакомиться.





More information about the nginx-ru mailing list