Проблемы...

Igor Sysoev is at rambler-co.ru
Mon Feb 20 11:15:12 MSK 2006


On Sun, 19 Feb 2006, Alexey N. Kovyrin wrote:

> Вот столкнулся с непонятной мне проблемой... У меня есть некоторое количество 
> самописных модулей к нгинксу, которые обеспечивают необходимую 
> функциональность для моего фрихостинга... вроде бы все хорошо, но где-то есть 
> утечка... как найти ее - я придумать так и не смог - все перепроверил, но 
> ничего не нашел... Может у кого-нибудь есть мысли, как можно найти место, где 
> "течет"? Насколько я понимаю, проблема у меня в коде "баннеровставлялки", но 
> там вроде бы негде было ошибиться...

Память течёт в рабочих процессах ?

> Некое подобие proof of concept этого модуля лежит в аттаче (вдруг 
> поможет?)...
>
> Еще одна проблема (не уверен, что не кореллирует с предыдущей): примерно раз 
> в сутки рабочие процессы нгинкса падают в кору, запускаются новые, но нгинкс 
> перестает отвечать на запросы... то есть accept происходит, но потом 
> соединение просто висит до таймаута со стороны клиента...
>
> Вот bt из коры:
>
> #0  0x0804d0c6 in ngx_chain_update_chains (free=0xad32508, busy=0xad3250c, 
> out=0xbffff9c8, tag=0x807f680) at src/core/ngx_buf.c:192
> 192             for (cl = *busy; cl->next; cl = cl->next) { /* void */ }
> (gdb) bt

--------
     head.buf = b;
         head.next = in;

     /* Find last node */
     cur = in;
         while (cur->next) cur = cur->next;

     /******* Bottom banner *******/
     b = ngx_calloc_buf(r->pool);
     if (b == NULL) {
         return NGX_ERROR;
     }

     b->memory = 1;
         b->last_buf = 1;
     b->pos = bottom_banner;
     b->last = bottom_banner + sizeof(bottom_banner) - 1;

     tail.buf = b;
     tail.next = NULL;
     cur->next = &tail;
     cur->buf->last_buf = 0;
     cur->buf->sync = 1;
--------

В полученную цепочку in нельзя вставлять звенья, хранящиеся на стеке (tail).
Нужно или полностью копировать цепочку, или выделять последнее звено tail
с помощью ngx_alloc_chain_link().


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list