赞
踩
1. 先安装dot和ps2pdf工具
只需要将环境变量 HEAPPROFILE
设置为内存统计结果的文件路径即可开启内存统计. 例如
HEAPPROFILE=server ./server
内存统计与性能收集不同. 性能收集是收集一段时间内各个函数所占用的时间, 而内存既有分配又有释放. 因此内存统计是统计特定时刻各个函数占用的内存大小.
gperftools 每过一段时间就会统计当前程序的内存占用情况, 生成一个结果文件. 如上面的例子, 环境变量 HEAPPROFILE=server
, 则会生成这样一系列的结果文件
- server.0001.heap
- server.0002.heap
- server.0003.heap
- ...
gperftools 的默认统计规则是, 程序每分配 1 GB, 或每占用 100 MB, 统计一次. 这个行为也可以通过环境变量控制
HEAP_PROFILE_ALLOCATION_INTERVAL
: 每分配多少字节的内存统计一次. 默认为 1073741824 (1 GB).HEAP_PROFILE_INUSE_INTERVAL
: 每占用多少字节的内存统计一次. 默认为 104857600 (100 MB).HEAP_PROFILE_TIME_INTERVAL
: 每隔多少秒统计一次. 默认为 0.HEAPPROFILESIGNAL
: 每当收到指定信号统计一次.1. 安装好 dot
和 ps2pdf
.安装方式如下
- yum install graphviz # 安装dot
- yum install ghostscript # 安装ps2pdf
2. 使用 pprof
导出内存分析报告.
pprof --pdf ./server server.0001.heap > heap.pdf
这能得到类似这样的分析报告:
内存报告同样显示各个函数的调用关系;每个节点上同样有 local of cumulative
这样的格式, local 为函数自身代码占用的内存大小, cumulative 为函数自身以及调用其他函数占用的内存大小. 每条边上的数字表示有多少内存是由于调用所指向函数而分配的.
内存分析报告清晰地显示每个函数占用的内存, 这些数据能够帮助我们检查内存泄露. 例如, 通过对比各个时间点函数占用的内存大小, 如果一个函数占用的内存一直在增长, 意味着这个函数很有可能有内存泄露. pprof
提供了 --base
参数帮助我们对比两个时间点的内存变化
pprof --pdf= --base=server.0001.heap ./server server.0003.heap > heap.pdf
这样报告显示的内存是 server.0003.heap
记录的内存占用减去 server.0001.heap
记录的内存占用.
参考链接:使用 gperftools 分析程序性能
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。