我试图使用UMDH来查找内存块分配的位置,但是我得到的结果似乎完全荒谬。
我启动程序,等待它达到平衡,然后用umdh获取快照。然后,我执行活动,使它吸收内存,等待它再次达到平衡,并获取另一个快照。然后我做了个差异化:
umdh -d -v 1.txt 2.txt > diff.txt我在perfmon中看到了5亿个额外的私有字节(其他内存计数器也相应地增长)。UMDH差异显示“减少.”一些巨大的数字。说什么?有人能解释一下为什么会是这样吗?
然后,我注释掉了在最大的增长堆栈中报告的函数中的所有活动。我再次进行了上述复制,观看了相同的500米增长模式,但UMDH报告的内存使用量略有增加!很小才是最有用的词。
第一部分真的让我大吃一惊。是什么原因导致UMDH显示堆使用减少,而perfmon显示同一进程分配的内存使用量有相当大的增加?
我考虑了线程堆栈,但线程堆栈计数实际上下降了。还有什么可以进入“私有字节”呢?
发布于 2013-12-10 09:48:23
将调试信息文件,即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。
https://stackoverflow.com/questions/17288546
复制相似问题