Re[2]: Умирают воркеры
Lin
shaman712 at inbox.ru
Mon Mar 2 14:13:59 MSK 2009
> > > > На сервере с nginx наблюдается следующие проблемы:
> > > > - скорость отдачи файлов предельно низкая (1-4 Кб/с)
> > > > - умирают воркеры, в статистике висят тысячи "активных" соединений
> > >
> > > Что показывает
> > >
> > > netstat -an | grep ESTAB | wc -l
> >
> > Сейчас показывает уже 1000.. число постепенно увеличивается. Но столько реальных клиентов точно нет!
>
> Факты таковы что соответствующее количество соединений открыто.
Тогда вопрос: почему они открыты? не должно быть столько клиентов!!! нормальное количество клиентов 300-400.. а здесь их количество просто постоянно растет.
>
> > > Это значит, что 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, поменять на другой и т.п.
диск WD SATA2 1Tb 32mb. когда файлы раздавались апачем, общая скорость отдачи была 15-20 Мб/с. А сейчас только 6-7.
> > 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?
top показывает следующее:
last pid: 61934; load averages: 1.15, 0.50, 0.32 up 28+00:48:23 13:05:20
136 processes: 1 running, 135 sleeping
CPU states: 8.1% user, 0.0% nice, 7.9% system, 0.9% interrupt, 83.1% idle
Mem: 220M Active, 3060M Inact, 433M Wired, 184M Cache, 214M Buf, 5652K Free
Swap: 512M Total, 57M Used, 455M Free, 11% Inuse
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
2236 root 1 96 0 12100K 4408K select 1 111:13 0.88% openvpn
61632 www 1 96 0 133M 9416K select 0 0:00 0.10% httpd
61842 www 1 96 0 133M 9400K select 0 0:00 0.09% httpd
61706 www 1 20 0 133M 9404K lockf 0 0:00 0.05% httpd
84294 root 1 96 0 132M 2172K select 0 12:17 0.00% httpd
898 mysql 1 8 0 6212K 0K wait 0 7:32 0.00% <sh>
19839 mysql 9 20 0 63692K 7148K sigwai 1 4:25 0.00% mysqld
743 root 1 96 0 4684K 440K select 0 2:44 0.00% syslogd
866 root 1 96 0 8960K 576K select 1 1:08 0.00% ntpd
46304 root 32 96 0 16608K 4540K select 0 0:50 0.00% 3proxy
939 root 1 96 0 10576K 668K select 0 0:33 0.00% sendmail
36938 www 1 -8 0 25064K 19968K biord 0 0:29 0.00% nginx
36935 www 1 -16 0 26088K 20232K pgrbwt 1 0:29 0.00% nginx
36937 www 1 -8 0 28136K 22336K biord 1 0:29 0.00% nginx
36936 www 1 -16 0 26088K 20976K pgrbwt 0 0:28 0.00% nginx
949 root 1 8 0 5736K 380K nanslp 0 0:07 0.00% cron
56989 www 1 -8 0 16836K 6692K piperd 1 0:07 0.00% perl5.8.8
933 root 1 96 0 20960K 384K select 0 0:04 0.00% sshd
56956 www 1 96 0 133M 9460K select 1 0:02 0.00% httpd
96246 www 1 76 0 0K 16K user m 1 0:02 0.00% httpd
21423 root 1 96 0 11504K 0K select 1 0:02 0.00% <mc>
58683 www 1 -8 0 16748K 6652K piperd 1 0:01 0.00% perl5.8.8
>
> > 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-ов специально сделал одинаковые, но разница в работе - огромная.
>
> В первую очредь влияет суммарный объём раздаваемых файлов (в
> частности горячей части), и отношение этого объёма к не занятой
> приложениями оперативной памяти (т.е. к объёму кеша файловой
> системы).
>
> Если на этих машинах нагрузка разная - то говорить о чём-либо без
> учёта вышеупомянутых факторов - бессмысленно.
>
> Ну и диски, опять же, бывают *сильно* разными.
В данном случае диски абсолютно одинаковые!
Что касается нагрузки, она тоже примерно одинаковая. При загрузке на сервер файлы с вероятностью 0.5 отправляются на одну или вторую машину. На первой машине стоит FreeBSD 7.0 i386, а на второй FreeBSD 7.0 amd64. На первой почему-то все работает, а на второй проблемы:(
когда файлы отдавались апачем, машины работали одинаково. Но отдавать более 300 файлов одновременно с помощью php оказалось очень накладно, поэтому пытаюсь настроить nginx.
>
> p.s. Уменьшайте output_buffers. Вы потребляете памяти существенно
> больше чем у вас есть.
>
на данный момент в конфиге установлено: output_buffers 1 1M; как мне посоветовали в рассылке.
P.S. я склонен полагать, что проблема-таки не в дисках, а в настройке nginx-а. Потому что при копировании файлов по протоколу FTP - скорость 250-300 Кб/с. Nginx начинает отдавать примерно на такой же скорости, потом количество непонятных подключений увеличивается, скорость падает, и уже около 500-600 подключений составляет 10-20 Кб/с.
More information about the nginx-ru
mailing list