worker process exited on signal 11 (core dumped)

Maxim Dounin mdounin на mdounin.ru
Ср Фев 10 05:45:26 MSK 2010


Hello!

On Tue, Feb 09, 2010 at 05:29:51PM +0300, Vladimir Sopot wrote:

> То ли сначала не заметил, то ли это после configure ...... --add-module=../ngx_http_upstream_keepalive-2ce9d8a1ca93/
> 
> 2010/02/09 16:20:47 [error] 28108#0: *30149916 memcached sent invalid trailer while sending to client, client: 75.76.60.101, server: tablew.ru, request: "GET /site/user.php?user=YYYYY HTTP/1.1", upstream: "memcached://unix:/tmp/memcached.sock:", host: "tablew.ru", referrer: 
> "http://tablew.ru"
> 
> 2010/02/09 16:20:48 [alert] 11625#0: worker process 28108 exited on signal 11 (core dumped)
> 
> memcached 1.4.4
> /usr/local/bin/memcached -u nobody -m 256 -c 8192 -d -s /tmp/memcached.sock

Это интересно, к этому мы вернёмся позже.

> в nginx.conf:
> 
> upstream tablew_mmc {
> 	server  unix:/tmp/memcached.sock;
> 	keepalive 30;                                                                                                                       
> 	}
> ....
> 
> location = /site/user.php {
> 	set $memcached_key "${query_string}_${cookie_shar}${cookie_show}${cookie_uid}${cookie_admin}";
> 	memcached_pass tablew_mmc;
> 	ssi on;
> 
> 	error_page 404 502 /site/user_real.php?$query_string;
> 	}
> .... 
> в этом ^^^ еще несколько  <!--# ssi include virtual="/mmc/today/....." -->
> конкретно эта корка на запросе с 13 

А /site/user_real.php как обрабатывается?  В корке был именно он.

Кстати, вероятно имелось ввиду всё-таки

        error_page 404 502 = /site/user_real.php?$query_string;

Note '='.

> 
> location ~ /mmc/today/(\d+) {
> 	internal;                                                                                                                       
> 	set $memcached_key "today_$1";
> 	memcached_pass tablew_mmc;
> 	error_page 404 502 /main/ssi/today_counter.php?ad=$1;
> 	}
> 
> >> # ../sbin/nginx -V
> >> nginx version: nginx/0.8.33
> >> built by gcc 4.3.2 [gcc-4_3-branch revision 141291] (SUSE Linux) 
> >> configure arguments: --with-http_stub_status_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_autoindex_module --without-http_browser_module --without-http_charset_module --without-http_map_module --without-http_userid_module --with-file-aio
> 
> добавил --add-module=../ngx_http_upstream_keepalive-2ce9d8a1ca93/
> жить стало интереснее, работает быстрее, падает, как и раньше, произвольно. core уже от этой сборки
> 
> > Если aio используется - попробовать отключить.
> 
> не помогло
> 
> > Также было бы замечательно пересобраться с --with-debug и 
> > попробовать получить debug log.
> 
> сервер сильно боевой - лог получается космический. debug_connection не помогает - я не могу нарваться на эту ошибку :(

Если сервер лог писать успевает - то дождаться проблемы вращая по 
необходимости, после чего отключить и неспеша выдрать из него 
нужное.  Не имея debug log'а - очень тяжело разбираться с 
подобными вещами.

Единственная ситуация в которой я смог воспроизвести нечто 
похожее - это бесконечная рекурсия SSI запросов.  Защита от неё 
есть, но поломана начиная с 0.7.25.  Прилагающийся патч возвращает 
защиту на место.

Если это таки была рекурсия - в логах должно появится что-то вроде

... [error] ... subrequests cycle while processing ...

Ну и корки должны пропасть.

Maxim Dounin
-------------- next part --------------
# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1265769044 -10800
# Node ID 09972a4975970f7c3510177b8a287283d3a53c58
# Parent  66adffc35a4699210362cfa10a2c279732861f41
Core: protect from subrequest loops.

Protection was broken in 0.7.25.

diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2147,7 +2147,6 @@ ngx_http_subrequest(ngx_http_request_t *
 
     sr->uri_changes = NGX_HTTP_MAX_URI_CHANGES + 1;
 
-    r->main->subrequests++;
     r->main->count++;
 
     *psr = sr;
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1938,6 +1938,7 @@ ngx_http_finalize_request(ngx_http_reque
         if (r == c->data) {
 
             r->main->count--;
+            r->main->subrequests++;
 
             if (!r->logged) {
 


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