Linux 常驻内存使用的概述/历史记录 我有一个相当复杂的程序(Python带有SWig+C++代码,长运行的服务器),显示了不断增长的内存占用。我一直在用常用工具(valgrind、Pythons gc模块等)挖掘漏洞,但到目前为止没有任何效果。我有点担心实际的问题是Python和/或libc管理内存中的内存碎片

Linux 常驻内存使用的概述/历史记录 我有一个相当复杂的程序(Python带有SWig+C++代码,长运行的服务器),显示了不断增长的内存占用。我一直在用常用工具(valgrind、Pythons gc模块等)挖掘漏洞,但到目前为止没有任何效果。我有点担心实际的问题是Python和/或libc管理内存中的内存碎片,linux,memory-management,Linux,Memory Management,无论如何,我现在的问题更具体:有没有一个工具可以可视化驻留内存的使用情况,并理想地显示它是如何随时间发展的?我认为原始数据在/proc/$PID/smaps中,但我希望有一个工具可以向我展示一个很好的图表,显示mmap'ed文件、匿名mmap'ed内存和堆随着时间的推移所使用的数量,以便更容易(确切地说)看到正在发生的变化。但是我什么也找不到 有谁知道有一种工具可以直观地绘制特定过程在空间和时间上的内存图(内存类型和数量) 更新:我找到了“pmap”工具,但我系统上的版本似乎无法处理RSS,并

无论如何,我现在的问题更具体:有没有一个工具可以可视化驻留内存的使用情况,并理想地显示它是如何随时间发展的?我认为原始数据在/proc/$PID/smaps中,但我希望有一个工具可以向我展示一个很好的图表,显示mmap'ed文件、匿名mmap'ed内存和堆随着时间的推移所使用的数量,以便更容易(确切地说)看到正在发生的变化。但是我什么也找不到

有谁知道有一种工具可以直观地绘制特定过程在空间和时间上的内存图(内存类型和数量)


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

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的最新版本使其内存分析器(“massif”)通过使用
--pages as heap=yes
支持页面级评测。耶!在massif中运行我的程序几个小时,然后将生成的文件输入到一个很好的图表中,显示了一段时间内每种页面类型的内存消耗,包括堆栈跟踪,以查看所有mmap调用的来源\o/

我使用vmstat进行测试,但它没有GUI等,它的所有原始数据:

[~]> vmstat -S K 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
1  0    172 663244 410016 187756    0    0     6    12   14    4  0  0 99  0
0  0    172 663228 410016 187756    0    0     0    68   20   66  0  0 100  0
0  0    172 663228 410016 187756    0    0     0     0   12   54  0  0 100  0
0  0    172 663228 410016 187756    0    0     0     0   20   54  0  0 100  0
^C

跟踪已创建对象引用计数将帮助您了解应用程序在何处消耗内存

我找到了这个代码,也许它能帮你


这很少见,但您可以检查文件(或套接字)泄漏,我的意思是当程序打开文件而从不关闭它们时。在我的桌面配置中,在超过1000+之前,没有任何套接字泄漏的迹象。当然,它们是开放的。1/秒,所以几天后就出现了。这是邪恶的