master_file_limit

Alex Vorona voron на amhost.net
Вт Фев 23 14:23:30 MSK 2010


23.02.2010 00:54, Kirill A. Korinskiy wrote:
> At Mon, 22 Feb 2010 16:27:51 +0200,
> Alex Vorona <voron at amhost.net> wrote:
>> 21.02.2010 23:56, Igor Sysoev wrote:
>>> On Mon, Feb 22, 2010 at 12:24:56AM +0300, Kirill A. Korinskiy wrote:
>>>
>>>> At Sun, 21 Feb 2010 14:03:07 +0200,
>>>> Alex Vorona <voron at amhost.net> wrote:
>>>>> Привет,
>>>>>
>>>>> При попытке релоада nginx'а с конфигурацией, которая содержит > 1024 файлов(> 500 доменов, 
>>>>> по 2 лога на домен), nginx не релоадится с ошибкой
>>>>> 2010/02/21 12:42:42 [emerg] 17723#0: open() "/var/log/nginx/www.domain.com.error.log" 
>>>>> failed (24: Too many open files)
>>>> дык, он просто выставляет rlimit после того как прочел конфиг, а т.к. ошибка происходит на
>>>> этапе чтения конфига, получаешь что получаешь. В случае reload у тебя уже есть
>>>> стотыщмильонов файловых дискрипторов, вот он и перечитывает их.
>>>>
>>>> Игорь, а зачем было вообще делать rlimit? зачем дублировать ручку системы?
>>> Появление worker_rlimit_... связано с рядом причин:
>> Я правильно понимаю, что master_rlimit_... не предвидится и стОит довольствоваться 
>> системными ручками для поднятия лимитов? Не похоже, что проблема только у меня.
>>
> 
> увы, но придется немного менять логику обработки конфига для реализации вашей хотелки.
> 
> Если очень сильно хочется, могу вам патчик сделать. Хочется?
> 
Спасибо, но поддерживать патчи ещё хуже чем rc.d-скрипты.

Единственное что мне не нравится - лимит нельзя поднять без прерывания в обслуживании. 
reload работает пока # сокетов + # логов текущей конфигурации + # логов новой конфигурации 
< лимита файловых дескрипторов, с которым был изначально запущен nginx. online upgrade 
пока # сокетов + # логов новой конфигурации < лимита файловых дескрипторов, с которым был 
изначально запущен nginx. Ну и в последнем случае nginx вообще не запустится без 
предварительного увеличения лимита файловых дескрипторов. Лимит файловых дескрипторов для 
worker'ов можно изменить с reload'ом, например при включении/увеличении open_file_cache, а 
при увеличении количества логов - только подкрутка лимита в rc.d-скриптах и рестарт с 
прерыванием обслуживания.



Подробная информация о списке рассылки nginx-ru