windbg + sos 调试w3wp进程内存崩溃问题

windbg + sos 调试w3wp进程内存崩溃问题
1.加载符合文件
C:\symbols;SRV*C:\symbols*http://msdl.microsoft.com/download/symbols;

2.加载sos.dll
.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\SOS.dll

3.查看托管堆里面的对象大小
!dumpheap -stat
72a52524     4780     19149568 System.Int64[]
66300224  1404204     22467264 System.ServiceModel.Description.XmlName
01239298     3170     25187084      Free
6f75ac00  1692875     40629000 System.Xml.XmlDictionaryString
72a40d1c    60413     47153628 System.Reflection.Emit.__FixupData[]
66301d38   979563     50937276 System.ServiceModel.Description.MessagePartDescription
6f75b8a8   143024     59241664 System.Collections.Generic.Dictionary`2+Entry[[System.String, mscorlib],[System.Xml.XmlDictionaryString, System.Runtime.Serialization]][]
72a52ee4   634786     82323112 System.Int32[]
72a53498   154589     83105136 System.Collections.Hashtable+bucket[]
72a24518  2153323     89750416 System.Object[]
72a50d48  4210817    305563628 System.String
72a537b8   526411    309971176 System.Byte[]

4.针对结果集里面的大对象,执行!dumpheap -mt 方法表地址
1984e140 72a537b8   262160     
19892618 72a537b8   131088     
198b2628 72a537b8   131088     
198d2638 72a537b8   131088     
1990f488 72a537b8   131088     
1992f4a8 72a537b8   262160     
1998af48 72a537b8   262160     
199caf68 72a537b8   262160     
19a0af78 72a537b8   131088     
19a2cfb0 72a537b8   262160     
19a6cfc0 72a537b8   262160     
19aacfe0 72a537b8   262160     
19aecff0 72a537b8   131088     
19b0f028 72a537b8   131088     
19b35090 72a537b8   131088     
19b550a0 72a537b8   262160     
上图列出了这类对象里面的单个对象大小。
再对它进行一次过滤,!dumpheap -min 85000 -mt 方法表地址
  Adress   MT          Size
1984e140 72a537b8   262160     
19892618 72a537b8   131088     
198b2628 72a537b8   131088     
198d2638 72a537b8   131088     
1990f488 72a537b8   131088     
1992f4a8 72a537b8   262160     
1998af48 72a537b8   262160     
199caf68 72a537b8   262160     
19a0af78 72a537b8   131088     
19a2cfb0 72a537b8   262160     
19a6cfc0 72a537b8   262160     
19aacfe0 72a537b8   262160     
19aecff0 72a537b8   131088     
19b0f028 72a537b8   131088     
19b35090 72a537b8   131088     
19b550a0 72a537b8   262160     
5.查看大对象的根,!gcroot 1984e140
Note: Roots found on stacks may be false positives. Run "!help gcroot" for
more info.
Scan Thread 7 OSTHread 13d8
Scan Thread 21 OSTHread 10e4
Scan Thread 22 OSTHread 1764
Scan Thread 23 OSTHread 668
Scan Thread 24 OSTHread 10f8
Scan Thread 25 OSTHread 1334
Scan Thread 26 OSTHread 1244
ESP:1c2dfb50: 1c2dfb88 (invalid object)
ESP:1c2dfc28: 1c2dfbec (invalid object)
ESP:1c2dfc2c: 1c2dfbec (invalid object)
ESP:1c2dfc64: 1c2dfbec (invalid object)
Scan Thread 27 OSTHread 1164
Scan Thread 29 OSTHread 14f0
Scan Thread 2 OSTHread a74
Scan Thread 35 OSTHread 8a0
Scan Thread 36 OSTHread 15d8
Scan Thread 37 OSTHread 17f4
Scan Thread 38 OSTHread 162c
Scan Thread 39 OSTHread 120c
Scan Thread 40 OSTHread 930
Scan Thread 41 OSTHread 15bc
Scan Thread 42 OSTHread a54
Scan Thread 44 OSTHread f8
Scan Thread 46 OSTHread 17d4
DOMAIN(01280308):HANDLE(Pinned):d013fc:Root:1206db58(System.Object[])->

6.找到对应代码,检查问题。

时间: 2024-12-23 20:39:57

windbg + sos 调试w3wp进程内存崩溃问题的相关文章

用windbg+sos找出程序中谁占用内存过高,谁占用CPU过高(转载)

原文地址: http://www.cnblogs.com/Lawson/archive/2011/01/23/1942692.html 很早看到windbg+sos方面的知识,一直没仔细学习,也许因为自己做的系统还不够复杂,也没线上真实环境查看的权限,一直没学习这方面的知识,最近几天仔细找了这方面的资料,自己也写了个可能造成高CPU高内存的测试web页面,发现确实不错,即使一个生手,也可以用工具连蒙带骗的猜出哪里出了问题,当然对一些命令和内部标示更熟悉了后,可以更好的找出问题所在,非常值得学习.

查看w3wp进程占用的内存及.NET内存泄露,死锁分析--转载

一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方式运行w3wp进程.这个可以通过查看IIS Application Pool 的高级选项进行设置: 好了,接下打开Windbg看看这个w3wp进程占用了376M内存,启动的54个线程. 1. 加载 WinDbg SOS 扩展命令 .load C:\Windows\Microsoft.NET\Fram

查看w3wp进程占用的内存及.NET内存泄露,死锁分析

一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方式运行w3wp进程.这个可以通过查看IIS Application Pool 的高级选项进行设置: 好了,接下打开Windbg看看这个w3wp进程占用了376M内存,启动的54个线程. 1. 加载 WinDbg SOS 扩展命令 .load C:\Windows\Microsoft.NET\Fram

CLR探索系列:Windbg+SOS动态调试分析托管代码

http://blog.csdn.net/garyye/article/details/4788070 在使用VS进行托管应用程序的调试的时候,有的时候总感觉有些力不从心.譬如查看一个托管堆或者计算堆栈的时候,VS就不能胜任了.这个时候,Windbg+SOS扩展调试模块就为我们提供了一个很好的解决方案.我们看一段代码:class Program    {        static void Main(string[] args)        {            Program b =

dnSpy调试IIS(w3wp进程)

因为IIS属于系统进程,所以正常启动dnSpy是看不到w3wp进程的,需要用管理员权限启动dnSpy. 启动之后,必须要通过 调试->窗口->模块 来选择要调试的dll,通过这种方式可以发现要调试的dll文件真实路径类似于下面这样: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\c1c3792f\7187ec00\assembly\dl3\4ef0d87c\03d3f73b_7cb1d5

Windbg程序调试--转载

WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. WinDbg是微软很重要的诊断调试工具: 可以查看源代码.设置断点.查看变量, 查看调用堆栈及内存情况. ? 调试应用程序(用户模式 user mode) ? 调试操作系统及驱劢程序(内核模式 kernel mode) ? 调试非托管程序(native program) ? 调试托管程序(managed program) ? 实时调试 (JIT:

SOS 调试扩展 (SOS.dll) 《第五篇》

SOS调试扩展让你可以查看在公共语言运行时里面运行的代码的有关信息.例如,你可以使用SOS调试扩展显示托管堆的有关信息,查找堆的错误,显示运行时使用的内部数据类型,以及查看在运行时里面运行的所有托管代码的有关信息. 使用SOS调试扩展的办法是把它装入到WinDbg.exe调试器,或者Visual Studio 2005或它的更早版本.你能够在WinDgb.exe里或者在Visual Studio的即时窗口里面执行令来载入它. 在Windbg.exe中装载SOS的命令是: .loadby sos

使用WinDbg内核调试[转]

Technorati 标签: windbg,内核调试 WINDOWS调试工具很强大,但是学习使用它们并不容易.特别对于驱动开发者使用的WinDbg和KD这两个内核调试器(CDB和NTSD是用户态调试器). 本教程的目标是给予一个已经有其他调试工具使用经验的开发者足够信息,使其能通过参考WINDOWS调试工具的帮助文件进行内核调试. 本文将假定开发者熟悉一般WINDOWS操作系统和进程的建立过程. 本文的重点是集成内核模式和用户态模式的图形化调试器WinDbg.KD在脚本和自动化调试中更有用,并且

SOS.dll(SOS 调试扩展)

SecAnnotate.exe(.NET 安全批注器工具) SignTool.exe(签名工具) Sn.exe(强名称工具) SOS.dll(SOS 调试扩展) SqlMetal.exe(代码生成工具) Storeadm.exe(独立存储工具) Tlbexp.exe(类型库导出程序) Tlbimp.exe(类型库导入程序) Winmdexp.exe(Windows 运行时元数据导出工具) Winmdexp.exe 错误消息 Winres.exe(Windows 窗体资源编辑器) 此文章由人工翻译