Windbg下使用dump分析内存溢出
https://www.cnblogs.com/M-MAKI/p/17085360.html
分析简述
创建dump文件;通过 !address -summary
和 !eeheap -gc 判断是否为内存泄漏;通过!dumpheap -stat观察出问题的类型;通过!dumpheap -mt MT号 -min xxx 来索引该类型下占用较高的数据;
再通过!gcroot GC根来查看该根被哪些所引用;
1.创建dump的方式可以在任务管理器中,在对应的进程下右击,选择创建转储文件
2.打开Windbg程序,选择Open Source File,选择刚刚的dump文件
3.在命令行输入!dumpheap -stat,可以查看当前所有托管类型的统计信息,包括它们的内存占用情况
4.从上图可以看到String和XML是占用内存最大的两个类型,我们接着使用!dumpheap -mt 00007ffaa50cd698 -min 300 命令检索对应MT中300byte以上的string
5.可以看出没有特别占用内存的string存在,但可以看看每个string下具体都存储的什么字符串
使用!do 000001b45c201080,即!do GC根,可使用!gcroot GC根查看该变量的引用情况,而如果gcroot出来没有引用根,即Found 0 unique roots (run '!GCRoot -all' to see all roots).则考虑是否是因为死线程的原因造成的。
参考文献:
https://blog.csdn.net/mzl87/article/details/127670331
https://blog.csdn.net/xdpcxq/article/details/128219304
https://blog.csdn.net/biyusr/article/details/125904480