【问题标题】:Why memory profiler doesn't show all the used memory?为什么内存分析器不显示所有使用的内存?
【发布时间】:2021-04-13 04:22:20
【问题描述】:

当我在 valgrind 下使用 massif 选项启动我的应用程序时,我看到 52.6 MiB 的峰值使用量。 但是 htop 说这个过程占用了 875MB 的 RES 内存。

同样的行为有 heaptrack。有谁知道为什么 profiler 不报告 800+MB 去了哪里?

【问题讨论】:

  • massif 只测量堆使用而不是映射内存(默认情况下)。你试过--pages-as-heap=yes吗?
  • @n.'pronouns'm。您可以将此作为答案提交。这就是我需要的。
  • 尽管您的列标题以某种方式未对齐,但似乎显示 875M 虚拟其中 812M 是共享的。您想要将共享内存(例如映射的共享库)计为“已使用”吗?即使没有您的进程,该内存也可能已被使用,大约 63M 的差异看起来是正确的。

标签: c++ memory valgrind profiler massif


【解决方案1】:

Massif 默认只测量由malloc 和朋友管理的堆。它不会尝试跟踪通过其他方式映射的页面(例如使用mmap)。

为了考虑所有页面,需要使用--pages-as-heap=yes 运行massif。

来源:Massif manual

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多