Welcome! Log In Create A New Profile

Advanced

Re: В логах pread() failed

March 10, 2010 05:48AM
On Wed, Mar 10, 2010 at 01:26:48PM +0300, Maxim Dounin wrote:

> > >> Подниму старую тему. Та же проблема, на маленьких файлах .js
> > >> nginx/0.7.65
> > >> 7.2-RELEASE FreeBSD
> > >> ufs, gmirror
> > >>
> > >> directio вообще не описан в конфиге, только
> > >> sendfile off;
> > >>
> > >> из кеширования есть еще:
> > >> open_file_cache max=10000 inactive=200s;
> > >> open_file_cache_valid 2s;
> > >> open_file_cache_min_uses 2;
> > >> open_file_cache_errors off;
> > >>
> > >> open_file_cache_valid раньше был 300 секунд, сейчас занизил. не
> > >> помогает. ошибки о несоответствии ожидаемого и фактического размеров
> > >> не уходят.
> >
> > > Такое может быть, если файлы переписываются по месту.
> >
> > Есть такое, по крону раз в 10 часов, но может быть форсировано вручную, через веб, файл изменяется
> > php скриптом fopen('', "w")
>
> Не делайте так (c)
>
> Вообще странно что ещё кто-то так делает. Апач в подобных
> ситуациях при некоторой доле везения начинал есть 100% CPU, должно
> было всех отучить надолго. Забывается история... ;)
>
> > > Сейчас open_file_cache проверяет inode number. При редактировании
> > > файла по месту - он не меняется, и кеш считает файл неизменившимся
> > > со всеми вытекающими последствиями. Можно пытаться проверять ещё
> > > и размер/mtime, но это в общем-то мёртвому припарки - лишь снижает
> > > вероятность проблемы, но не устраняет её (т.е. если вы поменяете
> > > файл в момент между проверкой размера и собственно отдачей клиенту
> > > - опять же будет ошибка).
> >
> > А как же open_file_cache_valid 2s ?
> > Даже если в течении этих 2х секунд и был старый inode number и
> > следовательно старый размер файла, то почему ошибка остается и в
> > дальнейшем, пока не graceful ну и restart само собой?
>
> Потому что 2 секунды - это вообще ничего не проверять. Через 2
> секунды будет сделан stat(), nginx убедится что inode number не
> поменялся - и с чистой совестью продолжит возвращать старые
> данные.
>
> На самом деле под FreeBSD всё немного не так (ибо вместо
> периодического stat()'а используется kevent(EVFILT_VNODE)), но часто
> запрашиваемый файл который пишут по месту поймается точно так же.

Для того, чтобы использовался EVFILT_VNODE, нужно поставить
open_file_cache_events on;

Но ставить не рекомендуется - там сейчас есть race condition, из-за
которого воркер падает.


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

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

nginx 0.8.33 с OpenSSL 0.9.8m, проверка клиентских сертификатов.

Yuriy Taraday March 04, 2010 05:56AM

Re: nginx 0.8.33 с OpenSSL 0.9.8m, проверка клиентских сертификатов.

Igor Sysoev March 04, 2010 07:22AM

Re: nginx 0.8.33 с OpenSSL 0.9.8m, проверка клиентских сертификатов.

Yuriy Taraday March 04, 2010 07:56AM

RE: В логах pread() failed

Elifan March 09, 2010 05:08PM

Re: В логах pread() failed

Maxim Dounin March 09, 2010 07:46PM

Re: В логах pread() failed

Elifan March 10, 2010 01:14AM

Re: В логах pread() failed

Maxim Dounin March 10, 2010 05:28AM

Re: В логах pread() failed

Igor Sysoev March 10, 2010 05:48AM

Re: В логах pread() failed

Elifan March 10, 2010 07:40AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 153
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready