gpt4 book ai didi

linux - 常驻内存使用的概述/历史

转载 作者:太空狗 更新时间:2023-10-29 11:20:34 37 4
gpt4 key购买 nike

我有一个相当复杂的程序(带有 SWIG'ed C++ 代码的 Python,长期运行的服务器),它显示了不断增长的常驻内存使用量。我一直在使用常用的泄漏工具(valgrind、Pythons gc 模块等)进行挖掘,但到目前为止无济于事。我有点担心实际问题是 Python 和/或 libc 托管内存中的内存碎片。

无论如何,我的问题现在更具体了:是否有一种工具可以可视化常驻内存使用情况并理想地显示它如何随时间发展?我认为原始数据在/proc/$PID/smaps 中,但我希望有一些工具可以向我展示 mmap 文件使用的数量与匿名 mmap 内存与堆随时间变化的漂亮图表,以便更容易看到(字面意思)发生了什么变化。但是我找不到任何东西。

有没有人知道有一种工具可以以直观的方式绘制特定进程在空间和时间上的内存映射(内存类型和数量)?


更新:我找到了“pmap”工具,但我系统上的版本似乎无法处理 RSS,并且没有提供合并所有映射文件大小的选项。映射的“anon”区域。我最终破解了一个小脚本,该脚本每两分钟解析一次/proc/$PID/smaps,而原始程序运行并打印如下行:

12:00:28 {'_TOTAL': 729.20703125, 'file': 53.609375, 'heap': 22.08984375,
'anon': 653.5, 'stack': 0.0078125}
...
15:42:47 {'_TOTAL': 940.16015625, 'file': 53.484375, 'heap': 22.2109375,
'anon': 864.45703125, 'stack': 0.0078125}

没有很好的图表,但在几个小时的运行时间之后,我认为这是一个安全的赌注,现在我必须仔细查看“anon”内存段:-)


更新:最新版本的 valgrind 通过使用 --pages-as-heap=yes 使其内存分析器(“massif”)支持页面级分析。好极了!通过 massif 运行我的程序几个小时,然后将结果文件输入 Massif Visualizer产生了一个很好的随时间变化的每种页面类型的内存消耗图,包括堆栈跟踪以查看所有 mmap 调用的来源。\o/

最佳答案

跟踪创建的对象引用计数将帮助您了解您的应用程序在哪里消耗了内存。

我找到了这段代码,也许它会对你有所帮助。

http://www.nightmare.com/medusa/memory-leaks.html

关于linux - 常驻内存使用的概述/历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531642/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com