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