• 使用 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 分析程序性能

  • 相关阅读:
    密码学之安全模型总结
    leakCanary原理
    js实现拖拽移动
    【暑期每日一题】洛谷 P7257 [COCI2009-2010#3] FILIP
    每天五分钟机器学习:支持向量机通过核函数解决线性不可分的问题
    Windows ObjectType Hook 之 SecurityProcedure
    Java安全之CC2
    推荐游戏《塞尔达传说:旷野之息》
    vue路由详解
    京东大佬问我:下单后30分钟未支付,自动取消有什么设计方案么?
  • 原文地址:https://blog.csdn.net/CODINGCS/article/details/126759282