0:007> !gcroot -nostacks 011412e8
DOMAIN(0014E8D8):HANDLE(Pinned):7d13f0:Root:02133030(System.Object[])->
011412c4(System.Configuration.ConfigurationPropertyCollection)->
011412d0(System.Collections.ArrayList)->
011412e8(System.Object[])
好,通过以上步骤,再加上你仔细的分析,应该会让“魔鬼”现原型的。
(三)用WinDbg crash模式,查找“内存溢出”的元凶
在Windows命令窗口中操作,如下两步就行:
1.进入命令行(CMD),并转到WinDBG安装目录(默认是c:"program files"debugging tools for windows), 运行以下这命令
cscript adplus.vbs -pn XXX.exe -crash -quiet -o <c:"dump>
2.让该进程继续工作,等问题发生后,会在c:"dumps下面产生几个目录,确定里面有(.dmp)文件
由于等现场DOWN可能要两三个月,所以我用另外的进程作了个测试,看看到底会产生什么样的文件内容。我在“任务管理器”中将一个进程关闭了,以下为关键内容。
--- 1st chance Process_Shut_Down exception ----
This process is shutting down!
This can happen for the following reasons
1) Someone killed the process with Task Manager or the kill command
2.) If this process is an MTS or COM+ server package, it could be
* exiting because an MTS/COM+ server package idle limit was reached.
3.) If this process is an MTS or COM+ server package,
* someone may have shutdown the package via the MTS Explorer or
* Component Services MMC snap-in.
4.) If this process is an MTS or COM+ server package,
* MTS or COM+ could be shutting down the process because an internal
* error was detected in the process (MTS/COM+ fail fast condition).
很明显,加粗部份就给我们显示了其被Kill的原因。
三、总结
本文就排除“内存溢出”的问题,简单谈了谈WinDbg的用法,由于是初次使用WinDbg,其中必然有错误或遗漏的地方,望大家指出。另外,WinDbg还有很多命令,可解决的故障也很多,如线程池耗尽,线程死锁等等。大家可对自己所遇到的问题进行针对地分析。