Поиск утечек памяти в Apache httpd и модулях

Каков лучший способ для нахождения утечек памяти в Apache httpd и httpd модулях?

Есть ли какие-либо практические руководства?

I'v попробовал valgrind немного, но немного препятствий появились:

  1. Valgrind ожидает, чтобы двоичный файл обычно выходил. Мне удалось сделать это с MaxRequestsPerChild и-X параметром.
  2. Valgrind сообщает о большом количестве материала, вероятно, соединенного с пулами в апреле, но ничем полезным.

ОС: Linux

P.S.:

Команда Valgrind: $ valgrind --leak-check=full --leak-resolution=med --log-file=/tmp/valgrind.log ./bin/httpd -X

Valgrind производят пример: http://paste-it.net/public/x5b6e8b/

8
задан Marko Kevac 16 February 2010 в 08:58
поделиться

3 ответа

Я не знаю волшебной пули, но вы можете взглянуть на файл valgrind / valgrind.h, в нем есть несколько полезных макросов, чтобы сделать вещи Valgrind осведомленными и изменить их поведение при работе под Valgrind .

Например,

#ifndef HAVE_VALGRIND_VALGRIND_H
#define RUNNING_ON_VALGRIND 0
#else
#include <valgrind/valgrind.h>
#endif

if (RUNNING_ON_VALGRIND) {
    printf("Hello, this is Valgrind instance %d\n", RUNNING_ON_VALGRIND);
    /* set debug output annoyingly high */
    /* exit after one request */
}

Вы также можете заключить весь этот беспорядок в NDEBUG , чтобы он не использовался в производственных сборках.

Это должно избавить вас от необходимости возиться с сервером каждый раз при отладке, он «просто сделает это», если будет обнаружен Valgrind. RUNNING_ON_VALGRIND расширится до экземпляра valgrind или останется 0, если не применимо.

В остальном (и я полагаю, вы получаете массу шума, скорее всего, начиная с недопустимого чтения размера xx ), вы можете систематически применять подавление. Если вы опубликуете часть вывода, может быть проще внести предложения по подавлению, которые вы можете вставить в файл.

Между прочим, список рассылки пользователя Valgrind чрезвычайно полезен и очень терпим. Вы также можете разместить там свой самый раздражающий и нерелевантный шум, вы получите ответы о том, как его быстро подавить.

Если все, что вам нужно, это сводка утечек и точек входа, которые к ним привели, не должно быть слишком сложно закрыть почти все остальное.

2
ответ дан 6 December 2019 в 01:40
поделиться

Вы можете попробовать интегрировать Bohem GC и позволить сборке мусора обнаруживать утечки памяти.

Просто посмотрите здесь, чтобы узнать, как это сделать:
http://www.hpl.hp.com/personal/Hans_Boehm/gc/leak.html

0
ответ дан 6 December 2019 в 01:40
поделиться

Может быть, пришло время рефакторить код, чтобы можно было запускать тесты вне apache?

Если вы добавите модульные тесты, проверяющие пути кода, которые выделяют память, вы сможете проверить, что вся память освобождена, запустив модульные тесты под valgrind. Таким образом, вам не придется беспокоиться о том, чтобы весь код, работающий под apache, обрабатывал только небольшое количество транзакций. Также будет проще проверить все пути кода с помощью юнит-тестов.

0
ответ дан 6 December 2019 в 01:40
поделиться