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

Maxim Dounin mdounin at mdounin.ru
Mon Mar 2 13:33:26 MSK 2009


Hello!

On Mon, Mar 02, 2009 at 11:44:52AM +0300, Lin wrote:

> > > На сервере с nginx наблюдается следующие проблемы:
> > > - скорость отдачи файлов предельно низкая (1-4 Кб/с)
> > > - умирают воркеры, в статистике висят тысячи "активных" соединений
> > 
> > Что показывает
> > 
> > netstat -an | grep ESTAB | wc -l
> 
> Сейчас показывает уже 1000.. число постепенно увеличивается. Но столько реальных клиентов точно нет!

Факты таковы что соответствующее количество соединений открыто.

[...]

> > Это значит, что nginx упёрт в дисковую подсистему.  И при 
> > включённом sendfile, и при выключенном.  Смотрите из чего именно 
> > она состоит, как её можно разгрузить и/или ускорить.  Начать 
> > рекомендую с внимательного изучения вывода gstat.
> > 
> > Ну и количество шпинделей посчитать, и привести количество 
> > воркеров в соответствие.  Ибо 30 - это много, за исключением очень 
> > специфичных задач.  Таким количеством воркеров вы гарантировано 
> > загоните диски в случайное чтение, и не стоит удивляться 
> > результату.
> 
> Жесткий диск под файлы всего один. gstat показывает следующее:
> 
> dT: 1.001s  w: 1.000s
>  L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
>     0      0      0      0    0.0      0      0    0.0    0.0| ad6
>     0      0      0      0    0.0      0      0    0.0    0.0| ad6s1
>     9     75     75   6617   95.0      0      0    0.0   98.6| ad10

SATA диски обычно выдают больше чем 75 операций в секунду на 
случайном чтении, хотя и не намного.  Ну и цифра 95 ms/r тоже не 
блещет, должно быть меньше.  Можно попробовать внимательно 
посмотреть на диск - почитать smart, поменять на другой и т.п.

>     0      0      0      0    0.0      0      0    0.0    0.0| ad6s1a
>     0      0      0      0    0.0      0      0    0.0    0.0| ad6s1b

Странно, что при таких буферах и таком количестве соединений 
система не ушла в swap.  Что показывает top?

>     0      0      0      0    0.0      0      0    0.0    0.0| ad6s1c
>     0      0      0      0    0.0      0      0    0.0    0.0| ad6s1d
>     0      0      0      0    0.0      0      0    0.0    0.0| ad6s1e
>     0      0      0      0    0.0      0      0    0.0    0.0| ad6s1f
>     9     75     75   6617   95.0      0      0    0.0   98.6| ad10s1
>     0      0      0      0    0.0      0      0    0.0    0.0| ad10s1c
>     9     75     75   6617   95.0      0      0    0.0   98.6| ad10s1d
> 
> ad10 - диск для хранения файлов, нагрузка пляшет от 98 до 101 процента.
> 
> 
> P.S. Рядом стоит практически такой же сервер, тоже один диск для хранения файлов, но там система 32-битная.
> На нем все работает вроде бы нормально, файлы отдаются значительно быстрее, хотя нагрузка должна быть больше. Настройки у nginx-ов специально сделал одинаковые, но разница в работе - огромная.

В первую очредь влияет суммарный объём раздаваемых файлов (в 
частности горячей части), и отношение этого объёма к не занятой 
приложениями оперативной памяти (т.е. к объёму кеша файловой 
системы).

Если на этих машинах нагрузка разная - то говорить о чём-либо без 
учёта вышеупомянутых факторов - бессмысленно.

Ну и диски, опять же, бывают *сильно* разными.

Maxim Dounin

p.s. Уменьшайте output_buffers.  Вы потребляете памяти существенно 
больше чем у вас есть.





More information about the nginx-ru mailing list