prof 配置的初始化路径
1 | malloc_init() 会被 constructor 调用 |
内存分配流程
1 | C 库内存管理函数 -> imalloc() -> imalloc_body() |
加载配置(环境变量)
1 | malloc_conf_init_helper() 会被初始化时调用 |
constructor :
1 | zone_register() 关于 zone 的,先不看 |
1 | je_mallctl("prof.dump") -> ctl_byname() -> (node->ctl) -> prof_dump_ctl -> prof_mdump -> prof_dump -> |
- dump 出结果文件时,增加时间戳:
prof_dump_filename()
- 随时启动、停止。通过脚本来启动、停止 prof。
- 先关闭 prof,
- 设置阈值,1. 申请量超过某值。2. 采样的 sample_value 值。3. 内存申请高水位超过某值
1 | export MALLOC_CONF="prof:true,lg_prof_interval:20,lg_prof_sample:19,prof_log:true,log=." |
1 | opt.prof: 启用/禁用内存分析 |
1 | 使用 atexit 注册一个函数当进程调用 exit 退出时被调用。 |
1 | 1. prof_fdump 只会在进程退出前被调用,生成 profiler 文件 |
需要注意的场景
- mem profiler start 之后,再次 start。或者 end 之后再次 end