我正在尝试使用UMDH来查找分配大量内存的地方,但我得到的结果似乎完全荒谬。
我启动程序,等待它达到平衡,然后用umdh抓取快照。然后我执行导致它吸收内存的活动,等待它再次达到平衡,并抓住另一个快照。然后我运行差异:
umdh -d -v 1.txt 2.txt > diff.txt
我在perfmon中见证了500M的额外私有字节(其他内存计数器也相应增长)。 UMDH差异显示“减少...”一些巨大的数字。说什么???任何人都可以解释为什么会这样吗?
然后我注释掉了最大增长堆栈中报告的函数中的所有活动。我再次执行上述repro,观看了相同的500M增长模式,但UMDH报告内存使用中的小增加!非常小的是那里的操作词。
第一部分真的让我大吃一惊。什么会导致UMDH显示堆使用减少但是perfmon显示同一进程分配的内存使用量相当大的增加?
我考虑了线程堆栈,但线程堆栈计数实际上下降了。还有什么可能进入“私人字节”?
答案 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。