ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] параметр --rlimit-nofile=COUNT для конфигурирования, по умолчанию 4096



On 28.02.2011 22:42, Igor Sysoev wrote:

2011/02/28 13:21:12 [emerg] 15785#0: open()
"/usr/share/nginx/logs/mbttechnology.access.log" failed (24: Too many
open files)

Это и есть ошибки при reload.
Возможно, нужно добавлять фразу "while reconfiguring".

предлагаю более простой и надежный вариант решения этой проблемы:

при старте nginx установить limit on number of open files
в (40 * 1024) вместо дефолтового для системы значения 1024.

это устранит проблему Too many open files во время service nginx reload,
при этом для worker-процессов можно будет выставить любой нужный лимит
с помощью глобальной директивы worker_rlimit_nofile в конфиге nginx.

А как на это значение будут реагировать ОСы ?
Например, во FreeBSD по умолчанию kern.maxfiles суммарно
для всех процессов около 12000.

Ok. изменил патч,
теперь лимит можно задать во время конфигурирования nginx
например, таким образом: ./configure --rlimit-nofile=16384

по умолчанию, если опция не задана - RLIMIT_NOFILE будет 4096
если надо вернуть старое поведение, тогда --rlimit-nofile=1024
при этом код для изменения RLIMIT_NOFILE не будет скомпилирован.

сейчас nginx перестает реагировать на service nginx reload
если в конфиге есть более чем 512 сайтов с 512 лог-файлами.
после применения патча - этот лимит увеличивается до 2048.

этот же лимит в 4096 открытых файловых дескрипторов будет
действовать и для всех worker-процессов, если начинающий
пользователь не задаст в конфиге директиву worker_rlimit_nofile

в то же время для advanced пользователей появляется возможность
увеличивать RLIMIT_NOFILE для master только с помощью опции configure
без необходимости вручную добавлять ulimit -n 16384 в стартовые скрипты

--
Best regards,
 Gena
--- src/core/nginx.c.orig       2011-02-28 19:01:31.000000000 +0200
+++ src/core/nginx.c    2011-03-01 13:32:06.000000000 +0200
@@ -199,6 +199,9 @@ int ngx_cdecl
 main(int argc, char *const *argv)
 {
     ngx_int_t         i;
+#if NGX_RLIMIT_NOFILE > 1024
+    struct rlimit     rlmt;
+#endif
     ngx_log_t        *log;
     ngx_cycle_t      *cycle, init_cycle;
     ngx_core_conf_t  *ccf;
@@ -266,6 +269,15 @@ main(int argc, char *const *argv)
 
     /* TODO */ ngx_max_sockets = -1;
 
+#if NGX_RLIMIT_NOFILE > 1024
+    rlmt.rlim_cur = (rlim_t) NGX_RLIMIT_NOFILE;
+    rlmt.rlim_max = (rlim_t) NGX_RLIMIT_NOFILE;
+    if (setrlimit(RLIMIT_NOFILE, &rlmt) == -1) {
+        ngx_log_stderr(0, "setrlimit(RLIMIT_NOFILE, %i) failed",
+                                             NGX_RLIMIT_NOFILE);
+    }
+#endif
+
     ngx_time_init();
 
 #if (NGX_PCRE)
--- configure.orig      2011-03-01 12:50:46.000000000 +0200
+++ configure   2011-03-01 12:56:40.000000000 +0200
@@ -108,5 +108,6 @@
 
 have=NGX_USER value="\"$NGX_USER\"" . auto/define
 have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define
+have=NGX_RLIMIT_NOFILE value="$NGX_RLIMIT_NOFILE" . auto/define
 
 . auto/summary
--- auto/options.orig   2011-03-01 12:57:50.000000000 +0200
+++ auto/options        2011-03-01 13:41:59.000000000 +0200
@@ -13,6 +13,7 @@
 NGX_LOCK_PATH=
 NGX_USER=
 NGX_GROUP=
+NGX_RLIMIT_NOFILE=4096
 
 CC=${CC:-gcc}
 CPP=
@@ -169,6 +170,8 @@
 
         --builddir=*)                    NGX_OBJS="$value"          ;;
 
+        --rlimit-nofile=*)               NGX_RLIMIT_NOFILE="$value" ;;
+
         --with-rtsig_module)             EVENT_RTSIG=YES            ;;
         --with-select_module)            EVENT_SELECT=YES           ;;
         --without-select_module)         EVENT_SELECT=NONE          ;;
@@ -318,6 +321,9 @@
 
   --builddir=DIR                     set the build directory
 
+  --rlimit-nofile=COUNT              maximum number of open file descriptors
+                                     allowed by default for the nginx process
+
   --with-rtsig_module                enable rtsig module
   --with-select_module               enable select module
   --without-select_module            disable select module
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.