0

我的项目将 Jemalloc 作为第三方库引入并启用 prof,如下所示:

genrule(
    name = "jemalloc-build",
    srcs = glob(["**/*"], exclude=["bazel-*"]),
    outs = [
        "jemalloc-out/lib/libjemalloc.a",
        "jemalloc-out/lib/libjemalloc_pic.a",
        "jemalloc-out/bin/jemalloc.sh",
        "jemalloc-out/bin/jeprof",
        "jemalloc-out/include/jemalloc/jemalloc.h",
    ],
    cmd = "\n".join([
        "export INSTALL_DIR=$$(pwd)/$(@D)/jemalloc-out",
        "export TMP_DIR=$$(mktemp -d -t jemalloc.XXXXXX)",
        "mkdir -p $$TMP_DIR",
        "cp -R $$(pwd)/external/jemalloc/* $$TMP_DIR",
        "cd $$TMP_DIR",
        "./configure --prefix=$$INSTALL_DIR --enable-prof",
        "make install",
        "rm -rf $$TMP_DIR",
    ]),
)

然后我添加环境变量”

export MALLOC_CONF="prof:true,prof_active:false,prof_prefix:jeprof.out,lg_prof_sample:0"

但是当我得到转储文件时,它似乎不正确,如下所示:

7fa3b9ce9000-7fa3b9cf9000 rw-p 00000000 00:00 0
7fa3b9cf9000-7fa3b9cfa000 ---p 00000000 00:00 0
7fa3b9cfa000-7fa3b9d0a000 rw-p 00000000 00:00 0
7fa3b9d0a000-7fa3b9d0b000 ---p 00000000 00:00 0
7fa3b9d0b000-7fa3b9d1b000 rw-p 00000000 00:00 0
7fa3b9d1b000-7fa3b9d1c000 ---p 00000000 00:00 0
7fa3b9d1c000-7fa3b9d32000 rw-p 00000000 00:00 0
7fa3b9d32000-7fa3b9d33000 ---p 00000000 00:00 0
7fa3b9d33000-7fa3b9df3000 rw-p 00000000 00:00 0
7fa3b9df3000-7fa3b9df4000 ---p 00000000 00:00 0
7fa3b9df4000-7fa3b9e05000 rw-p 00000000 00:00 0
7fa3b9e05000-7fa3b9e06000 ---p 00000000 00:00 0
7fa3b9e06000-7fa3b9ff9000 rw-p 00000000 00:00 0
7fa3b9ff9000-7fa3b9ffa000 ---p 00000000 00:00 0
7fa3b9ffa000-7fa3ba00d000 rw-p 00000000 00:00 0
7fa3ba00d000-7fa3ba00e000 ---p 00000000 00:00 0
7fa3ba00e000-7fa3ba0c7000 rw-p 00000000 00:00 0
7fa3ba0c7000-7fa3ba0c8000 ---p 00000000 00:00 0
7fa3ba0c8000-7fa3ba0db000 rw-p 00000000 00:00 0
7fa3ba0db000-7fa3ba0dc000 ---p 00000000 00:00 0
7fa3ba0dc000-7fa3ba319000 rw-p 00000000 00:00 0
7fa3ba319000-7fa3ba31a000 ---p 00000000 00:00 0
7fa3ba31a000-7fa3ba33a000 rw-p 00000000 00:00 0
7fa3ba33a000-7fa3ba33b000 ---p 00000000 00:00 0
7fa3ba33b000-7fa3ba3ec000 rw-p 00000000 00:00 0
7fa3ba3ec000-7fa3ba3ed000 ---p 00000000 00:00 0
7fa3ba3ed000-7fa3ba644000 rw-p 00000000 00:00 0
7fa3ba644000-7fa3ba645000 ---p 00000000 00:00 0
7fa3ba645000-7fa3bac00000 rw-p 00000000 00:00 0
7fa3bad80000-7fa3bb057000 rw-p 00000000 00:00 0
7fa3bb057000-7fa3bb058000 ---p 00000000 00:00 0
7fa3bb058000-7fa3bb081000 rw-p 00000000 00:00 0

我使用 jeprof 来获取解析结果,除了两行,它什么也得不到,像这样:

Using local file 20210824105158/main.
Using local file profiling/0a613e694b7207f16d442c754d29b9dc/20210824.041637.HEAP.

希望能得到您的帮助,谢谢!

我触发转储的代码是这样的

  ::mallctl("prof.active", NULL, NULL, &active, sizeof(active));
  absl::SleepFor(duration);
  const char* fileName = prof_file_path.c_str();
  ::mallctl("prof.dump", NULL, NULL, &fileName, sizeof(const char*));
  active = false;
  ::mallctl("prof.active", NULL, NULL, &active, sizeof(active));
4

0 回答 0