当前位置:   article > 正文

使用 gperftools 分析程序内存占用情况_gperftools内存分析

gperftools内存分析

1. 先安装dot和ps2pdf工具

开启内存统计

只需要将环境变量 HEAPPROFILE 设置为内存统计结果的文件路径即可开启内存统计. 例如

HEAPPROFILE=server ./server

内存统计与性能收集不同. 性能收集是收集一段时间内各个函数所占用的时间, 而内存既有分配又有释放. 因此内存统计是统计特定时刻各个函数占用的内存大小.

gperftools 每过一段时间就会统计当前程序的内存占用情况, 生成一个结果文件. 如上面的例子, 环境变量 HEAPPROFILE=server, 则会生成这样一系列的结果文件

  1. server.0001.heap
  2. server.0002.heap
  3. server.0003.heap
  4. ...

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.安装方式如下

  1. yum install graphviz # 安装dot
  2. 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 分析程序性能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/809369
推荐阅读
相关标签
  

闽ICP备14008679号