- 背景
在比较大的工程中,进程的内存占用分析是很重要的一环,可以分析出各个模块的内存占用,也可以接下来对内存占用大的模块进行优化等等。Google Profiler工具可以简单、快捷的打印出每个函数的内存占比。 - 安装
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.5/gperftools-2.5.tar.gz
./configure
make -j 32
make install
- 使用
- 加载执行时替换的so
env LD_PRELOAD="/usr/lib/libtcmalloc.so"
; - 设置生成prof文件的位置
HEAPPROFILE=/tmp/mybin.hprof ./main
- 生成报告,两种生成模式1. pdf模式,2. text模式
- pdf模式:
pprof --pdf main test.prof.0001.heap > test.pdf
- text模式:
pprof --text main test.prof.0001.heap > test.txt
- pdf模式:
- 加载执行时替换的so
- 分析
我们生成了一个pdf图如下:
/tmp/workspace/tf_venv/bin/python Total MB: 164608.2
Focusing on: 164608.2
Dropped nodes with <= 823.0 abs(MB) Dropped edges with <= 164.6 MB
上图告诉我们,我们消耗了大致164GB内存,为了图的清晰可见,丢弃了小于823MB的点和小于164MB的内存传递。
图如下:
因为一些不能机密信息不能查看,我仅截图了少部分内容,这样我们就能知道内存的分配主要是在哪里了。