Описание

memleax

memleax отлаживает и находит утечки памяти без перезагрузки сервиса или процесса и без перекомпилляции.

как это работает

memleax ищет утечки памяти работающего процесса путем присоединения к нему. Он ловит в целевом процессе вызовы выделения памяти и освобождения и сообщает о блоках памяти, которые живут дольше заданного времени. По умолчанию, долгий период жизни считается более 10 секунд, однако этот параметр может быть изменен опцией -e.

Это очень удобно использовать и подходит для рабочих серверов. Т.к нет необходимости в пересборке программы. Вы запускаете memleax присоединив его к целевому процессу, ждете и получаете отчет в реальном времени, потом убиваете memleax(Ctrl-C) и мониторинг прекращается.

memleax отслеживает новые потоки, НО не следит за отпочковавшимися процессами. Для слежения за всеми экземплярами процесса, необходимо для каждого из них запускай свой экземпляр memleax.

влияние на производительность

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

сборка

Необходимы пакеты:

  • libunwind
  • libelf
  • libdw или libdwarf. libdw предпочтительнее

Когда все библиотеки установлены - запустите:

USER
$ ./configure $ make $ sudo make install

Использование

Для отладки целевого процесса, запустите:

$ memleax [options] <target-pid>

отчеты будут выдаваться в режиме реального времени.

Подождите. Блоки памяти живущее дольше чем установлено -e параметром, будут отображаться так:

Отчет

CallStack[3]: memory expires with 101 bytes, backtrace:
    0x00007fd322bd8220  libc-2.17.so  malloc()+0
    0x000000000040084e  test  foo()+14  foo.c:12
    0x0000000000400875  test  bar()+37  bar.c:20
    0x0000000000400acb  test  main()+364  test.c:80
CallStack[3] is the ID of CallStack where memory leak happens.