Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: master_file_limit
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@xxxxxxxxxx> 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_... связано с рядом причин:
1) В какой-то момент из Линукса вынесли /proc/sys/kernel/rtsig-max,
заменив на RLIMIT_SIGPENDING, но ручки из userland к нему не приделали.
2) Для того, чтобы разрешить в Линуксе создавать корки, проще написать:
поставьте
worker_rlimit_core 1g;
working_directory /path/to/cores;
3) задавать rlimit на старте не самое тривиальное занятие.
Например, во FreeBSD можно записать в /etc/sysctl.conf:
kern.maxfiles=204800
но на скрипты в /usr/local/etc/rc.d/ это никак не влияет, потому что
эти команды выполняются в разных несвязанных шеллах.
В результате в скрипте старта нужно указать
ulimit -n `sysctl -n kern.maxfilesperproc`
Кроме того, многие рекомендуют ставить лимиты в /etc/limits.conf, что,
разумеется, не решает проблему.
4) Чтобы менять rlimit без рестарта.
--
Игорь Сысоев
http://sysoev.ru
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|