ПРОЕКТЫ 


  АРХИВ 


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



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



 




Copyright © Lexa Software, 1996-2009.