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