Проблемы...
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