【问题标题】:overview/history of resident memory usage常驻内存使用的概述/历史
【发布时间】:2011-05-30 17:16:22
【问题描述】:

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

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

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


更新:我找到了“pmap”工具,但我系统上的版本似乎无法处理 RSS,并且没有提供合并所有映射文件大小的选项。映射“匿名”区域。我最终破解了一个小脚本,它每两分钟解析一次 /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}

没有漂亮的图表,但经过几个小时的运行后,我认为这是一个安全的选择,因为我必须仔细查看“匿名”内存段 :-)


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

【问题讨论】:

    标签: linux memory-management


    【解决方案1】:

    这种情况很少见,但您可以检查文件(或套接字)泄漏,我的意思是当程序打开文件并且从不关闭它们时。在我的桌面配置中,直到超过 1000+ 时才出现套接字泄漏的迹象。当然,它们是打开 cca 的。 1/秒,所以几天后出现了。太邪恶了!

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        我用 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
        

        【讨论】:

          猜你喜欢
          • 2011-03-15
          • 2012-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-10
          • 1970-01-01
          • 2023-03-09
          • 2012-11-06
          相关资源
          最近更新 更多