sendfilev() failed (22: Invalid argument) while sending response to client

Igor Sysoev is at rambler-co.ru
Mon Mar 9 21:28:49 MSK 2009


On Mon, Mar 09, 2009 at 09:15:28PM +0300, Alexey Rymonin wrote:

> AV> 09.03.2009 18:27, Alexey Rymonin wrote:
> 
> >> D> Пришлите сразу, какую ы используете файловую систему.
> 
> >> zfs
> 
> >> Появляется только если включено кеширование дескрипторов и я пытаюсь 
> >> открыть странуцу, пока файл перезаписывается....
> AV> видимо, nginx пытается отдать данные по уже несуществующему в файле смещению. Отключайте кеш
> AV> дескрипторов для таких файлов или уменьшайте его таймауты и игнорируйте эти ошибки.
> 
> Ошибка моделированная, и в моем случаи встречается на этапе разработки.
> Но дело не в смещении, поскольку происходило только увеличение объема файла.

Не факт, что перезапись выглядит как truncate(0), а потом запись.
open_file_cache хранит длину файла, поэтому возможна попытка передать
больше, чем есть на данный момент. В принципе, такое может возникнуть
и без open_file_cache:

1) открыли файл,
2) узнали длину и время,
3) начали перезаписывать файл,
4) вызываем sendfile с большим офсетом/размером.

open_file_cache только усугубляет проблему, так как длина файла больше
хранится.

Чтобы не было таких ошибок, нужно менять файлы атомарно, как делает,
например, rsync.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list