UMDH& perfmon私有字节

时间:2013-06-25 03:11:35

标签: windows memory-leaks perfmon umdh

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

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

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

我在perfmon中见证了500M的额外私有字节(其他内存计数器也相应增长)。 UMDH差异显示“减少...”一些巨大的数字。说什么???任何人都可以解释为什么会这样吗?

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

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

我考虑了线程堆栈,但线程堆栈计数实际上下降了。还有什么可能进入“私人字节”?

1 个答案:

答案 0 :(得分:0)

将调试信息文件(即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。