我的客户在两台生产服务器上安装了 ASP.NET 应用程序(与 NLB 平衡,但这无关紧要)。
两台服务器每 3-4 小时就会崩溃一次,并出现以下事件查看器记录的错误:
错误应用程序名称:w3wp.exe,版本:7.5.7601.17514,时间戳:0x4ce7afa2
错误模块名称:clr.dll,版本:4.0.30319.18034,时间戳:0x50b5a783
异常代码:0xc00000fd 故障偏移量:0x000000000001a840
错误进程 ID:0xd50
错误的应用程序启动时间:0x01ce97fe076d27b4
错误应用程序路径: c:\windows\system32\inetsrv\w3wp.exe
错误模块路径:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 报告 ID:e0c90a5f-0455-11e3-8f0e-005056891553
我不知道如何调试或从哪里开始。当崩溃即将发生时,服务器处理器使用率会跃升至 100% 并保持在该水平。出错的进程是w3wp.exe。我什至不确定我的代码是否生成错误。这是 IIS 7.5。任何指示将不胜感激。
看起来您有一个 StackOverflow 异常,这是由无界递归(函数重复调用自身等)引起的。这不能被常规的 try/catch 块捕获。您可以使用以下命令来追踪问题调试诊断 and WinDbg.
可以将 DebugDiag 配置为在发生 StackOverflowException 时生成故障转储。下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=58210.
- 打开 DebugDiag 并单击添加规则。
- “崩溃”应该已经被选择。点击下一步。
- 选择“特定的 IIS Web 应用程序池”,然后单击“下一步”。
- 选择应用程序池并单击“下一步”。
- 您应该位于高级配置窗口中。单击高级设置下的例外。
- 单击添加异常并选择 Stack Overflow,操作类型为 Full Userdump
- 单击“确定”并保存并关闭。
下次发生 StackOverflowException 时,您将获得故障转储。现在需要解释转储文件。
Windows 调试工具是 Windows SDK 的一部分,可以在以下位置下载:http://msdn.microsoft.com/en-US/windows/hardware/gg463009/.
- 要使用 WinDbg,您需要获取符号文件。下载符号文件并将它们放在本地文件夹中。
- 打开WinDbg。在“文件”菜单上,单击“符号文件路径”。
- 在“符号路径”框中,文档显示要键入以下命令:
SRV*your local folder for symbols*http://msdl.microsoft.com/download/symbols
,但是我只是将符号放入本地文件夹中,效果很好。
- 退出并再次打开 WinDbg,然后打开故障转储并找到由 DebugDiag 创建的转储文件。
- 在命令行中输入
.loadby sos clr
- 现在输入
!CLRStack
在结果中,应该清楚问题是什么(您可能会看到一堆显示重复调用的函数的行)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)