Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Master процесс nginx 0.6.38 съедае т всю доступную память
Добрый вечер!
Да, мы уже нашли эту проверку в новой версии и обновились на 0.7 ветку :)
Всем спасибо!
2009/9/18 Igor Sysoev <is@xxxxxxxxxxxxx>:
> On Fri, Sep 18, 2009 at 02:47:02PM +0400, Maxim Dounin wrote:
>
>> Hello!
>>
>> On Fri, Sep 18, 2009 at 01:52:23PM +0400, Igor Sysoev wrote:
>>
>> > On Thu, Sep 17, 2009 at 02:59:21PM +0400, Maxim Dounin wrote:
>> >
>> > > Hello!
>> > >
>> > > On Thu, Sep 17, 2009 at 09:11:02AM +0500, Одинцов Павел wrote:
>> > >
>> > > > Доброе утро!
>> > > >
>> > > > Снова воспроизвелось на 0.6.38 и очень красиво воспроизвелось :)
>> > >
>> > > [...]
>> > >
>> > >
>> > > > --- SIGHUP (Hangup) @ 0 (0) ---
>> > > > gettimeofday({1253118667, 649143}, NULL) = 0
>> > > > rt_sigreturn(0x667b29) = -1 EINTR (Interrupted system
>> > > > call)
>> > > > gettimeofday({1253118667, 649273}, NULL) = 0
>> > > > uname({sys="Linux", node="server4.hosting.reg.ru", ...}) = 0
>> > > > open("/etc/nginx/nginx.conf", O_RDONLY) = 21
>> > > > fstat(21, {st_mode=S_IFREG|0640, st_size=1023752, ...}) = 0
>> > > > pread(21, "################################"..., 4096, 0) = 4096
>> > >
>> > > [...]
>> > >
>> > > > pread(21, "\tproxy_pass http://87.242.78.188"..., 4093, 1021200) = 2539
>> > > > brk(0x1cc67000) = 0x1cc67000
>> > > > pread(21, "", 4094, 1023739) = 0
>> > >
>> > > [...]
>> > >
>> > > Судя по всему, nginx.conf переписали в процессе чтения его
>> > > nginx'ом. Прочиталось всего 1023739 байт (1021200 + 2539), а файл
>> > > исходно был размером 1023752 байта.
>> > >
>> > > Баг это не отменяет, но вообще так делать нельзя, файлы надо
>> > > менять атомарно (писать в другое место + rename). Как минимум от
>> > > подобных действий должна случаться ошибка чтения конфигурации (и
>> > > отмена переконфигурации соответственно).
>> >
>> > Странно, что не отработал этот код:
>> >
>> > if (n != size) {
>> > ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
>> > ngx_read_file_n " returned "
>> > "only %z bytes instead of %z",
>> > n, size);
>> > return NGX_ERROR;
>> > }
>> >
>> > потому что в strace нет результата ngx_conf_log_error().
>> >
>> > У меня в искусствено созданном случае выдаётся
>> > [emerg] 7899#0: pread() returned only ... bytes instead of ... in ...
>> > и всё завершается.
>>
>> 0.6.38
>
> Спасибо. Мне казалось, что эта проверка появилась давно, а оказывается,
> только в 0.7.14.
>
>
> --
> Игорь Сысоев
> http://sysoev.ru
>
>
--
С уважением, Одинцов Павел
|