Windbg下使用dump分析内存溢出
分析简述
创建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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?