1

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

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

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

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

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

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

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

4

1 回答 1

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。

于 2013-12-10T09:48:23.100 回答