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

  • 相关阅读:
    sklearn.preprocessing.StandardScaler¶
    打家劫舍 -- 动规
    [plugin:vite:css] [sass] Undefined mixin.
    1162地图分析
    网络文件共享服务介绍
    C++菱形继承问题
    Python(7)循环语句
    vue+echarts项目八:库存情况(显示占比圆环图)
    Echarts实现半圆形饼图,Echarts实现扇形图
    理解Lua中“元表和元方法“
  • 原文地址:https://blog.csdn.net/CODINGCS/article/details/126759282