ПРОЕКТЫ 


  АРХИВ 


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]

Re: worker process ... exited on signal 25



Alexander Yurchik wrote:

Настроен nginx с апачем в качестве бекэнда для обработки динамики. Все работало отлично, пока вдруг не перестали открываться страницы сайта.

в логах нгинкса куча ошибок вида
2008/05/30 17:10:36 [alert] 20078#0: worker process 21910

в логах апача ничего подозрительного не нашел.
Что странно - создал файл php с вызовом phpinfo() и больше ничего. Так вот вывод из phpinfo отдается не полностью а примерно первых 20%. Если обращаться через server.com:8080/file.php - то отдается все без проблем. То есть апач обрабатывает все корректно, но почему-то обрывается связь между апачем и нгинксом.

Ну и эти ошибки в логах нгинкса....

Похоже включена буферизация ответов бакэнда (proxy_buffering on) и nginx натыкается на RLIMIT_FSIZE, когда пытается записать ответ на диск.
phpinfo() как раз достаточно длинный.

Варианты решения:

1) Отключить буферизацию (proxy_buffering off)
2) Попытаться установить RLIMIT_FSIZE из шелла перед
запуском: ulimit -f unlimited (не всегда будет работать)
3) Попытаться использовать пачт из аттача, который вводит новую директиву worker_rlimit_fsize аналогичную директиве worker_rlimit_core.

Ещё хотелось бы узнать какая ОС? У меня такой эффект проявлялся при
аплоадах то ли на 6-й убунте, то ли на SuSE 8.2 (не помню точно).

--
Regards,
Valery Kholodkov
diff -Naur nginx-0.7.1/src/core/nginx.c nginx-0.7.1-mine/src/core/nginx.c
--- nginx-0.7.1/src/core/nginx.c        2008-05-22 14:09:41.000000000 +0200
+++ nginx-0.7.1-mine/src/core/nginx.c   2008-05-30 16:47:52.000000000 +0200
@@ -115,6 +115,13 @@
       offsetof(ngx_core_conf_t, rlimit_core),
       NULL },
 
+    { ngx_string("worker_rlimit_fsize"),
+      NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
+      ngx_conf_set_size_slot,
+      0,
+      offsetof(ngx_core_conf_t, rlimit_fsize),
+      NULL },
+
     { ngx_string("worker_rlimit_sigpending"),
       NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
       ngx_conf_set_num_slot,
@@ -733,6 +740,7 @@
 
     ccf->rlimit_nofile = NGX_CONF_UNSET;
     ccf->rlimit_core = NGX_CONF_UNSET_SIZE;
+    ccf->rlimit_fsize = NGX_CONF_UNSET_SIZE;
     ccf->rlimit_sigpending = NGX_CONF_UNSET;
 
     ccf->user = (ngx_uid_t) NGX_CONF_UNSET_UINT;
diff -Naur nginx-0.7.1/src/core/ngx_cycle.h 
nginx-0.7.1-mine/src/core/ngx_cycle.h
--- nginx-0.7.1/src/core/ngx_cycle.h    2008-05-16 16:39:06.000000000 +0200
+++ nginx-0.7.1-mine/src/core/ngx_cycle.h       2008-05-30 16:48:37.000000000 
+0200
@@ -78,6 +78,7 @@
      ngx_int_t                rlimit_nofile;
      ngx_int_t                rlimit_sigpending;
      size_t                   rlimit_core;
+     size_t                   rlimit_fsize;
 
      int                      priority;
 
diff -Naur nginx-0.7.1/src/os/unix/ngx_process_cycle.c 
nginx-0.7.1-mine/src/os/unix/ngx_process_cycle.c
--- nginx-0.7.1/src/os/unix/ngx_process_cycle.c 2008-05-25 20:27:38.000000000 
+0200
+++ nginx-0.7.1-mine/src/os/unix/ngx_process_cycle.c    2008-05-30 
16:54:30.000000000 +0200
@@ -841,6 +841,17 @@
         }
     }
 
+    if (ccf->rlimit_fsize != NGX_CONF_UNSET_SIZE) {
+        rlmt.rlim_cur = (rlim_t) ccf->rlimit_fsize;
+        rlmt.rlim_max = (rlim_t) ccf->rlimit_fsize;
+
+        if (setrlimit(RLIMIT_FSIZE, &rlmt) == -1) {
+            ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+                          "setrlimit(RLIMIT_FSIZE, %i) failed",
+                          ccf->rlimit_fsize);
+        }
+    }
+
 #ifdef RLIMIT_SIGPENDING
     if (ccf->rlimit_sigpending != NGX_CONF_UNSET) {
         rlmt.rlim_cur = (rlim_t) ccf->rlimit_sigpending;


 




Copyright © Lexa Software, 1996-2009.