heap profiler
brpc可以分析内存是被哪些函数占据的。heap profiler的原理是每分配满一些内存就采样调用处的栈,“一些”由环境变量TCMALLOC_SAMPLE_PARAMETER控制,默认524288,即512K字节。根据栈表现出的函数调用关系汇总为我们看到的结果图。在实践中heap profiler对原程序的影响不明显。
开启方法
在shell中。该变量指每分配这么多字节内存时做一次统计,默认为0,代表不开启内存统计。官方文档建议设置为524288。这个变量也可在运行前临时设置,如。如果没有这个环境变量,可能会看到这样的结果:
如果只是brpc client或没有使用brpc,看。
注意要关闭Server端的认证,否则可能会看到这个:
图示
左上角是当前程序通过malloc分配的内存总量,顺着箭头上的数字可以看到内存来自哪些函数。
点击左上角的text选择框可以查看文本格式的结果,有时候这种按分配量排序的形式更方便。
左上角的两个选择框作用分别是:
- Diff:和选择的profile做对比。表示什么都不选。如果你选择了之前的某个profile,那么将看到View框中的profile相比Diff框中profile的变化量。
在Linux下,你也可以使用pprof脚本(tools/pprof)在命令行中查看文本格式结果:
brpc还提供一个类似的growth profiler分析内存的分配去向(不考虑释放)。
MacOS的额外配置
- 安装standalone pprof,并把下载的pprof二进制文件路径写入环境变量GOOGLE_PPROF_BINARY_PATH中
- 安装llvm-symbolizer(将函数符号转化为函数名),直接用brew安装即可: