ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Затыки при отдаче статики



23 ноября 2013 г., 13:03 пользователь Alex Vorona <voron@xxxxxxxxxx> написал:
22.11.2013 22:47, Gelun, Artem wrote:
> Добрый вечер, коллеги
>
> Помогите, пожалуйста, разобраться с тормозами при отдаче статики (файлы
> порядка 2-4 МБайт, около 700-1000 rps, keep-alive не используется со
> стороны клиента (!), 99% клиентских сессий - с localhost, отдача начинает
> тормозить где-то на 2.7-3 Gbps)
> проблема выглядит как периодическое "залипание" загрузки файла на некоторый
> интервал (от долей секунды до нескольких секунд).
перегрузка дисков?

Для "боевой" нагрузки - возможно и так. Но что тогда с tmpfs?
Или имеется ввиду перегрузка дисков и блокировка чего то (чего и когда?), что влечёт затыки и для tmpfs?
 
[...]
> LA на сервере высокий (в основном, из-за чтения с HDD), на 16 ядрах
> держится около 16.
Если клиент умеет ходить в unix-сокет (например nginx) - попробуйте перевести. Для HDD
nginx и ОС нужно настраивать так чтобы nginx читал с диска как можно бОльшими в пределах
разумного кусками, 512к-2048к например. Для этого прочитанные данные должны влазить в
буфер сокета, желательно также увеличить readahead, например через blockdev --setra

опять же, tmpfs, RA не актуален.
unix socket не умеет (пока). Вообще, мысль хорошая, спасибо.
в listen для проверки выставил уже запредельный sndbuf=8192k (благо памяти хватает), в sysctl - "net.ipv4.tcp_wmem = 4096 131072 8388608" - всё равно затыки даже на файлах по 4МБайта.

При том затыкается именно где-то посередине в большинстве случаев, но в разные моменты (т.е. нет явной связи с объёмом закачки). Действительно ощущение, что что-то куда-то не влазит. Но, опять же, куда?


С апачем проблем нет, так как он скорее всего prefork, и не занимается переключением между
клиентами внутри одного процесса. С запущенным рядом ещё одним nginx, на который не идёт
нагрузка, также не должно быть проблем.

Насколько я понимаю, sendfile (который включен и должен отрабатывать) не блокирует worker'а. Единственное подозрение - воркеры блокируются при открытии файла с "перегруженного" HDD. Но:
1) как это проверить?
2) увеличение кол-ва worker'ов (до 64) не помогает
3) Если я правильно понимаю, при размере файла < размера буфера сокета и если sendfile_max_chunk не установлен, то sendfile должен вызываться один раз. Соответсвенно, если затык в nginx, то он будет перед началом отдачи данных. Но затыкаться может где угодно - и на 9%, и на 15%, и на 67%... (опять же, речь про tmpfs, с которой вообще никто ничего не читает, кроме теста)

 

А вообще я не уверен что при перегруженных HDD проблема имеет решение, если поступающих
запросов больше, чем может обслужить дисковая подсистема.

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.