使用Google开源工具gperftools进行堆内存占用分析

背景:项目中有多卡训练的需求,多进程时每个进程都需要编译,占用内存过大,需要找出内存占用多的点并尝试优化。
目标程序是python的多进程程序,torch_xla多卡训练,程序包含python及c++库,尝试过其他工具发现并不合适,最终采用此工具。

工具介绍

This is the heap profiler we use at Google, to explore how C++ programs manage memory. This facility can be useful for:

  • Figuring out what is in the program heap at any given time
  • Locating memory leaks
  • Finding places that do a lot of allocation

有2种使用方式,这里采用非侵入式的方式,即通过设置环境变量,hook内存分配的接口,例如:

env LD_PRELOAD=“/usr/lib/libtcmalloc.so”

使用过程

dump:

mkdir profs_gen
# dump size选项参考Modifying Runtime Behavior一节
export HEAP_PROFILE_ALLOCATION_INTERVAL=10737418240
export HEAP_PROFILE_INUSE_INTERVAL=10737418240
LD_PRELOAD=/usr/local/lib/libtcmalloc.so HEAPPROFILE=profs_gen/profs python distributed_train.py

得到分析结果:

# 到terminal
pprof --text /bin/ls profs.0001.heap
# 或生成pdf
pprof --pdf /bin/ls profs_gen2/profs.0002.heap > profs.0002.pdf

分析

这里分析其中一路内存占用:
在这里插入图片描述

编译安装

wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.5/gperftools-2.5.tar.gz
./configure
make && make install

若要使用--pdf选项生成pdf文档,需要另外安装依赖库:

sudo apt-get install ghostscript # ps2pdf
sudo apt-get install graphviz # dot

参考资料

Gperftools Heap Profiler
pprof on Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值