【问题标题】:linux mechanism to measure process memory consumption flinux机制来衡量进程内存消耗f
【发布时间】:2011-07-10 21:54:53
【问题描述】:

以编程方式测量同一运行进程的堆内存消耗的最有效和最准确的方法/API 是什么?我想估计(尽可能准确)自启动以来newmalloc 的内存量减去freedelete 的内存量

问题的范围是 linux 和可能的其他 linux 环境。语言是 C 或 C++


编辑 对于我的目的来说,通过任何malloc 实现知道分配/持有块的实际数量(和大小)就足够了,我不需要实际 malloc 内存减去释放内存的细节

【问题讨论】:

  • 从程序内部(您希望它监控自身)还是外部(您希望监控正在运行的程序)?用于人类(交互式使用)还是自动化?
  • 来自同一个进程,大概是使用C库
  • 如果您编写了代码,请为分配/删除添加包装器并计算字节数...

标签: c linux unix memory-management


【解决方案1】:

假设新使用 malloc 看here

有关进程内存分配的更多详细信息,请查看 /proc/[pid]/maps。

还要注意 linux 实现了写时复制。这意味着有时进程可以共享内存。如果进程是在之后没有调用 exec 的情况下分叉的,则尤其如此。

【讨论】:

    【解决方案2】:

    您可以使用mallinfo 进行估算。我刚刚找到这个,不确定这是进程还是系统..:/

    我不完全确定你在问什么,由于内存碎片,malloc 减去 freed 小于实际使用量,如果你真的需要这个数字,你必须使用自定义分配器(它们是现有分配器的微小包装器)代码中的任何地方都会很痛苦。

    【讨论】:

      【解决方案3】:

      您是否考虑过从 /proc/u/stat 读取数据? (其中“u”是你的 pid)

      【讨论】:

        【解决方案4】:

        如果您使用 valgrind 并运行程序完成,它会为您提供有关内存使用情况的报告。

        http://valgrind.org/

        【讨论】:

        • 抱歉我的问题不够清楚。我的意思是从同一个运行过程中以编程方式。我编辑以反映这一点
        【解决方案5】:

        您可以通过链接tcmalloc from Google Perftools 来获得有关堆使用情况的大量信息。它旨在定位内存泄漏并确定“到底是谁分配了所有这些 RAM”,但它提供了足够的工具来回答您可能对堆提出的大多数问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-19
          • 1970-01-01
          • 1970-01-01
          • 2022-06-14
          • 2021-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多