如何分析内存使用情况?
- 2024-10-25 08:42:00
- admin 原创
- 59
问题描述:
我知道 Valgrind,但它只是检测内存管理问题。我正在寻找一个可以让我概览程序的哪些部分消耗了多少内存的工具。例如,用树形图(就像 KCachegrind 为 Callgrind 所做的那样)来表示图形会很酷。
我在 Linux 机器上工作,所以 Windows 工具对我没有太大帮助。
解决方案 1:
使用massif,它是 Valgrind 工具的一部分。massif -visualizer可以帮助您绘制数据图,或者您也可以直接使用ms_print
命令。
解决方案 2:
试用Google 随gperftools提供的堆分析器。我一直从源代码构建它,但它在多个 Linux 发行版下以预编译包的形式提供。
使用起来非常简单,只需将动态库链接到可执行文件并运行程序即可。它会收集有关每个动态内存分配的信息(就我所知),并在每次发生以下情况时将内存转储保存到磁盘:
HEAP_PROFILE_ALLOCATION_INTERVAL
程序已分配的字节数(默认值:1Gb)高水位内存使用标记按
HEAP_PROFILE_INUSE_INTERVAL
字节增加(默认值:100Mb)HEAP_PROFILE_TIME_INTERVAL
已过秒数(默认值:未激活)HeapProfilerDump()
您从代码中明确调用
根据我的经验,最后一个是最有用的,因为您可以精确控制何时获取堆使用情况的快照,然后比较两个不同的快照并查看哪里出了问题。
最终,有几种可能的输出格式,如文本或图形(有向图的形式):
使用此工具,我能够发现使用 Massif 无法发现的错误内存使用情况。
解决方案 3:
一个“较新”的选项是HeapTrack。与 massif 相反,它是malloc
/的仪表化版本free
,可存储所有调用并转储日志。
GUI 很好(但需要 Qt5 IIRC)并且结果时间(因为您可能也想跟踪时间)比 valgrind 更少偏差(因为它们没有被模拟)。
解决方案 4:
将 callgrind 选项与 valgrind 结合使用
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件