Hello! On Tue, Mar 01, 2016 at 01:05:37PM -0500, mikhal123 wrote:
> 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 остается доволен Ну то есть вы тщательно проигнорировали всё то доброе и вечное, что nginx писал вам про некорректность вашей работы с файлами, и вместо того, чтобы исправить проблему, заткнули сообщение, дополнив файл пробелами? И, судя по тому, что сейчас у вас всё зацикливается - ещё и убрали из кода это дополнение пробелами? Почему-то вспоминается старый анекдот про японскую бензопилу. ;) Не надо так. Обновляйте файл атомарно, i.e., пишите новый файл, а потом делайте rename() в старое имя. И будет вам счастье. > Но проблему с зацикливанием, как я понимаю, в ближайшее время вы не сможете > решить, и как самый простой вариант - отключить aio threads до лучших > времен? Самый простой вариант - починить обновление файла, сделав его атомарным. -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
