Maxim Dounin Wrote:
> Это, безусловно, ошибка - должна быть ругань в логе, а не цикл.
> E.g, при выключенном sendfile'е - будет что-то вроде:
>
> [alert] ... read() read only ... of ... from "..."
>
> А на FreeBSD и при использовании sendfile() в таком случае будет:
>
> [alert] ... sendfile() reported that "..." was truncated at ...
>
> На Linux'е интерфейс sendfile() несколько другой, и явного
> детектирования таких ошибок сейчас nginx делать не умеет.
> Когда-нибудь обязательно научим, тем более, что при использовании
> thread'ов это стало нехорошо проявляться.
>
> Следует, однако, понимать, что в случае неатомарного обновления
> файлов клиент имеет все шансы получить произвольную смесь из
> старого и нового файлов (не говоря уже о новом содержимом,
> обрезанном по старому размеру), и делать так - не надо. А если вы
> так делаете - то надо быть готовым как минимум к мусору в ответах,
> а как максимум - и к более другим проблемам.
>
> "В точно такой же конфигурации" - это вряд ли. Два года назад в
> nginx'е не было поддержи "aio threads", а на цикл вы наступили
> именно из-за неё - в обычной ситуации на Linux'е соединение просто
> повиснет до таймаута.
>
> Что до мусора, то тут всё зависит от везения и конкретного формата
> данных. Если специально не пытаться ловить повреждения данных -
> можно долго ничего не замечать, списывая проблемы на подземный
> стук.
По поводу iao threads согласен, запамятовал что включил его после обновления
Про ошибки
[alert] ... read() read only ... of ... from "..."
помню, встречал. В моем случае решается несложно - обновляемый файл (а мне нужно его обновлять, тут никуда не деться) всегда дополняется пробелами до заранее заданного размера, и nginx остается доволен
Но проблему с зацикливанием, как я понимаю, в ближайшее время вы не сможете решить, и как самый простой вариант - отключить aio threads до лучших времен?