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

Gelun, Artem a at gelun.ru
Sat Nov 23 11:11:27 UTC 2013


23 ноября 2013 г., 13:03 пользователь Alex Vorona <voron at amhost.net>написал:

> 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 at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20131123/58153d1c/attachment-0001.html>


Подробная информация о списке рассылки nginx-ru