我的项目将 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));