【问题标题】:UMDH & perfmon private bytesUMDH & perfmon 私有字节
【发布时间】:2013-06-21 17:33:12
【问题描述】:

我正在尝试使用 UMDH 来查找分配了大块内存的位置,但我得到的结果似乎完全荒谬。

我启动程序,等待它达到平衡,然后用 umdh 抓取快照。然后我执行导致它吸收内存的活动,等待它再次达到平衡,然后获取另一个快照。然后我运行一个差异:

umdh -d -v 1.txt 2.txt > diff.txt

我看到 perfmon 中有 500M 额外的私有字节(其他内存计数器也相应地增长)。 UMDH diff 显示了“减少”一些巨大的数字。说什么???谁能解释为什么会这样?

然后我注释掉了函数中在最大增长堆栈中报告的所有活动。我再次执行上述重现,观察了相同的 500M 增长模式,但 UMDH 报告内存使用量有小增加!!!非常小是那里的有效词。

第一部分真的让我大吃一惊。什么会导致 UMDH 显示堆使用量减少但 perfmon 显示同一进程分配的内存使用量增加相当大?

我考虑了线程堆栈,但线程堆栈计数实际上下降了。 “私有字节”还可能包含哪些内容?

【问题讨论】:

    标签: windows memory-leaks perfmon umdh


    【解决方案1】:

    将调试信息文件,即pdb,放入exe的同一路径。以下命令有效,将 PID 替换为您要转储的实际进程 ID:

    umdh -p:PID -f:memlog1.txt
    
    umdh -p:PID -f:memlog2.txt
    
    umdh memlog1.txt memlog2.txt > result.txt
    

    如果您看到以下警告:

    Warning:
    Warning: UMDH didn't find any allocations that have stacks collected.
    Warning: Use gflags to enable allocation stack collection.
    Warning: Restart the application for the setting to be in effect.
    

    运行:

    gflags -i "full\path\of\exe" +ust
    

    在再次运行 umdh 之前重新启动 exe。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多