JeMalloc не создает дамп утечки памяти - PullRequest
0 голосов
/ 07 декабря 2018

Мне нужна помощь с профилированием памяти с помощью JeMalloc.

Я делаю следующее:

git clone https://github.com/jemalloc/jemalloc 
cd jemalloc 
./autogen.sh --enable-perf 
make dist 
make 
sudo make install

export MALLOC_CONF=prof_leak:true,lg_prof_sample:0,prof_final:true 
export LD_PRELOAD=/usr/local/Cellar/jemalloc/5.1.0/lib/libjemalloc.dylib 

Затем я запускаю свое приложение:

./some_executed_file

Это100%, что этот двоичный файл будет использовать jemalloc, потому что, когда я звоню

typedef struct {
  char *cur;
  char *end;
} MallocStatus;

static void GetJemallocStatus(void *mstat_arg, const char *status) {
  MallocStatus *mstat = reinterpret_cast<MallocStatus *>(mstat_arg);
  size_t status_len = status ? strlen(status) : 0;
  size_t buf_size = (size_t)(mstat->end - mstat->cur);
  if (!status_len || status_len > buf_size) {
    return;
  }

  snprintf(mstat->cur, buf_size, "%s", status);
  mstat->cur += status_len;
}

MallocStatus mstat;
const unsigned int kMallocStatusLen = 1000000;
std::unique_ptr<char[]> buf{new char[kMallocStatusLen + 1]};
mstat.cur = buf.get();
mstat.end = buf.get() + kMallocStatusLen;
je_malloc_stats_print(GetJemallocStatus, &mstat, "");
stats->append(buf.get());

, я вижу статистику JeMalloc.

Относительно https://github.com/jemalloc/jemalloc/wiki/Use-Case:-Leak-Checking

Я делаю все правильно - ноЯ до сих пор не вижу, чтобы файл дампа jeprof анализировал утечки памяти.

Заранее спасибо.

1 Ответ

0 голосов
/ 06 апреля 2019

Попробуйте добавить prof:true,prof_active:true к вашему MALLOC_CONF и использовать флаг --enable-prof вместо --enable-perf.

...