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

URL: https://github.com/WuBingzheng/memleax

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

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

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

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

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

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

сборка

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

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

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

./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.

Добавить комментарий

Следующая запись Предыдущая запись