[英]UMDH & perfmon private bytes
我正在尝试使用UMDH来查找在哪里分配了大块内存,但是我得到的结果似乎完全荒谬。
我启动程序,等待它达到平衡,然后使用umdh捕获快照。 然后,我执行使它消耗内存的活动,等待它再次达到平衡,然后获取另一个快照。 然后我运行一个差异:
umdh -d -v 1.txt 2.txt > diff.txt
我在perfmon中目睹了500M的其他专用字节(其他内存计数器也相应增加)。 UMDH差异显示“……的减少”。 说什么??? 谁能解释为什么会这样?
然后,我注释掉了在最大增长堆栈中报告的函数中的所有活动。 我再次执行了上述复制操作,观察到相同的500M增长模式,但是UMDH报告内存使用量有小幅增长 !!! 很小,是那里的常用词。
第一部分确实让我大吃一惊。 是什么会导致UMDH减少堆使用,而perfmon显示同一进程分配的内存使用却有相当大的增加?
我考虑了线程堆栈,但是线程堆栈数量实际上减少了。 “私有字节”还有什么可能呢?
将调试信息文件(即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
并重新启动exe,然后再次运行umdh。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.