Memory leak в самописном коде

Alexey N. Kovyrin alexey at kovyrin.net
Sun Jan 8 19:29:59 MSK 2006


Igor Sysoev пишет:
>>> ngx_pfree() вызывать не нужно, так как он умеет освобождать только
>>> большие куски памяти. По окончании запроса вся память, выделенная из 
>>> r->pool,
>>> освобождается. А ngx_pfree() используется, например, в gzip-фильтре
>>> по окончании сжатия для освобождения буферов, выделенных для zlib.
>>> Это около 100-300К, и их можно освободить, чтобы не занимать эту память
>>> во время передачи ответа клиенту.
>>>
>>> А memory leak скорее всего в generate_top_banner() - там нужно
>>> всю память выделять через ngx_palloc(r->pool, ...).
>> Проблемка вся в том, что утечка была и в случае двух статичных 
>> баннеров... то есть когда в верхнем буфере тоже было memory = 1 и не 
>> было temporary = 1.
>> Как бы проверить, куда оно память девает....
> Есть ли в коде вызвовы malloc()/calloc() или ngx_alloc()/ngx_calloc() ?
# grep alloc ngx_http_banner_filter_module.c ngx_http_servik_module.c 
ngx_http_limitsize_filter_module.c
ngx_http_banner_filter_module.c:        *buf = top_banner = 
ngx_palloc(r->pool, top_banner_size);
ngx_http_banner_filter_module.c:    b = ngx_calloc_buf(r->pool);
ngx_http_banner_filter_module.c:    b = ngx_calloc_buf(r->pool);
ngx_http_banner_filter_module.c:    bcf = ngx_palloc(cf->pool, 
sizeof(ngx_http_banner_conf_t));
ngx_http_banner_filter_module.c:        bcf->girls = 
ngx_palloc(cf->pool, file_info.st_size);
ngx_http_servik_module.c:       xml_packet = ngx_palloc(r->pool, 
xml_packet_len);


1-й вызов выделяет память под топ-баннер и она освобождается после 
обработки запроса.
2-й и 3-й вызовы - выделение буферов для баннеров.
4-й и 5-й - это, соответственное, создание конфигурации и выделение 
массива с информацией о баннерах (внутри ngx_http_banner_create_conf).
последнее - это отправка пакета статистики демону статистики и для него 
даже pfree есть.

Погляжу-ка я повнимательнее на то, как меняется загрузка памяти... может 
оно до определенного уровня растет и потом останавливается...

-- 
/Scoundrel    [http://kovyrin.info]







More information about the nginx-ru mailing list