<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">23 ноября 2013 г., 13:03 пользователь Alex Vorona <span dir="ltr"><<a href="mailto:voron@amhost.net" target="_blank">voron@amhost.net</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">22.11.2013 22:47, Gelun, Artem wrote:<br>
> Добрый вечер, коллеги<br>
><br>
> Помогите, пожалуйста, разобраться с тормозами при отдаче статики (файлы<br>
> порядка 2-4 МБайт, около 700-1000 rps, keep-alive не используется со<br>
> стороны клиента (!), 99% клиентских сессий - с localhost, отдача начинает<br>
> тормозить где-то на 2.7-3 Gbps)<br>
> проблема выглядит как периодическое "залипание" загрузки файла на некоторый<br>
> интервал (от долей секунды до нескольких секунд).<br>
</div>перегрузка дисков?<br></blockquote><div><br></div><div>Для "боевой" нагрузки - возможно и так. Но что тогда с tmpfs?</div><div>Или имеется ввиду перегрузка дисков и блокировка чего то (чего и когда?), что влечёт затыки и для tmpfs?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
[...]<br>
<div class="im">> LA на сервере высокий (в основном, из-за чтения с HDD), на 16 ядрах<br>
> держится около 16.<br>
</div>Если клиент умеет ходить в unix-сокет (например nginx) - попробуйте перевести. Для HDD<br>
nginx и ОС нужно настраивать так чтобы nginx читал с диска как можно бОльшими в пределах<br>
разумного кусками, 512к-2048к например. Для этого прочитанные данные должны влазить в<br>
буфер сокета, желательно также увеличить readahead, например через blockdev --setra<br></blockquote><div><br></div><div>опять же, tmpfs, RA не актуален.</div><div>unix socket не умеет (пока). Вообще, мысль хорошая, спасибо.</div>
<div>в listen для проверки выставил уже запредельный sndbuf=8192k (благо памяти хватает), в sysctl - "net.ipv4.tcp_wmem = 4096<span class="">        </span>131072<span class="">      </span>8388608" - всё равно затыки даже на файлах по 4МБайта.</div>








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







<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
С апачем проблем нет, так как он скорее всего prefork, и не занимается переключением между<br>
клиентами внутри одного процесса. С запущенным рядом ещё одним nginx, на который не идёт<br>
нагрузка, также не должно быть проблем.<br></blockquote><div><br></div><div>Насколько я понимаю, sendfile (который включен и должен отрабатывать) не блокирует worker'а. Единственное подозрение - воркеры блокируются при открытии файла с "перегруженного" HDD. Но:</div>
<div>1) как это проверить?</div><div>2) увеличение кол-ва worker'ов (до 64) не помогает</div><div>3) Если я правильно понимаю, при размере файла < размера буфера сокета и если sendfile_max_chunk не установлен, то sendfile должен вызываться один раз. Соответсвенно, если затык в nginx, то он будет перед началом отдачи данных. Но затыкаться может где угодно - и на 9%, и на 15%, и на 67%... (опять же, речь про tmpfs, с которой вообще никто ничего не читает, кроме теста)</div>
<div><br></div>







<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
А вообще я не уверен что при перегруженных HDD проблема имеет решение, если поступающих<br>
запросов больше, чем может обслужить дисковая подсистема.<br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div><br></div></div>