使用Windbg-UMDH定位内存上涨
当测试到程序发生了内存上涨问题后,
第一步,使用VMMap确定内存上涨时涨在了哪里?
第二步,如果是涨在了Heap上,使用Windbg的UMDH来抓取程序的执行片段内存堆栈分配情况
1. 程序启动稳定后第一次抓取内存
2. 程序明显上涨后抓取第二次内存,建议上涨80~100M时抓取。
3. 两次内存做比较,查看明显上涨的调用栈是哪里(第一个调用栈),就可以定位出主要上涨原因。
UMDH的使用:
1. 运行cmd,转至Windbg目录
2. 设置符号路径:set _NT_SYMBOL_PATH=SRV*D:\SysSymbols*http://msdl.microsoft.com/download/symbols;添加自己程序的pdb路径
3. 开启堆转储: gflags -i TestMemory.exe +ust
4. 运行TestMemory.exe
5. 记录堆使用情况: umdh -p:[TestMemory进行ID] -f:[记录的文件名] 如:umdh -p:2055 -f:test1.txt
6. 待运行一段时间后,再次记录堆使用情况,如:umdh -p:2055 -f:test2.txt
7. 比较堆变化: umdh -d test1.txt test2.txt > test_diff.txt
8. 查看test_diff.txt就可以分析两次转储之间堆的上涨情况了。