我们在客户的多台服务器上托管了一个 Web 应用程序。最近,只有其中一台服务器上的应用程序池大约每 15 分钟回收一次。我检查了事件查看器,没有“警告”级别的日志包含有关任何偶然异常的一些帮助。我只找到了一些“信息”级别的日志,其来源是“Windows 错误报告”,其中包含以下内容:
Fault bucket , type 0
Event Name: CLR20r3
Response: Not available
Cab Id: 0
Problem signature:
P1: w3wp.exe
P2: 7.5.7601.17514
P3: 4ce7a5f8
P4: mscorlib
P5: 4.0.30319.17929
P6: 4ffa561c
P7: 1098
P8: 0
P9: System.StackOverflowException
P10:
Attached files:
These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_w3wp.exe_a7ffe533c17adc1b839d5aa19f1af2e61b1d2_0704a515
Analysis symbol:
Rechecking for solution: 0
Report Id: 7fc73fce-5389-11e5-9721-7824af3d6615
Report Status: 4
和这个:
Fault bucket 3263327202, type 1
Event Name: APPCRASH
Response: Not available
Cab Id: 0
Problem signature:
P1: w3wp.exe
P2: 7.5.7601.17514
P3: 4ce7a5f8
P4: clr.dll
P5: 4.0.30319.17929
P6: 4ffa5753
P7: c00000fd
P8: 000010b9
P9:
P10:
Attached files:
C:\Windows\Temp\WERC4A6.tmp.appcompat.txt
C:\Windows\Temp\WERC523.tmp.WERInternalMetadata.xml
C:\Windows\Temp\WERC524.tmp.hdmp
C:\Windows\Temp\WERED7D.tmp.mdmp
These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportArchive\AppCrash_w3wp.exe_868a5e613d491401176645f115078f3faa98e9_03a912c5
Analysis symbol:
Rechecking for solution: 0
Report Id: 4c379387-5388-11e5-9721-7824af3d6615
Report Status: 0
还有一些“错误”级别的日志,其来源是“应用程序错误”,内容如下:
Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7a5f8
Faulting module name: clr.dll, version: 4.0.30319.17929, time stamp: 0x4ffa5753
Exception code: 0xc00000fd
Fault offset: 0x00019fe9
Faulting process id: 0xcac
Faulting application start time: 0x01d0e79515891375
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: dc73f522-5388-11e5-9721-7824af3d6615
我尝试读取 C:\ProgramData\Microsoft\Windows\WER\ReportArchive\AppCrash_w3wp.exe..... 中的文件,但未能理解问题所在。我如何才能找到此错误的原因?
答案1
您可以看到它提到了 System.StackOverflowException,这种情况很少发生,因此这是一个很好的调查起点。您获得的第二条信息是它最近才开始。
如果您确实有版本跟踪系统,请尝试查找相关时间范围内的所有应用程序更新,并查找任何类型的递归(直接、间接……)。StackOverflow 通常由代码中失控的递归引起。
如果代码不明显(即不容易找到任何此类递归,或者代码中有太多递归而您无法确定导致问题的递归),则应尝试在其中放置日志。将日志条目放入代码的各个位置,以便您可以识别某些函数在执行流程中何时进入和离开。
由于每 15 分钟就会崩溃一次,您应该能够使用日志非常快速地调试这个问题,因为一旦您将日志放入正确的(有缺陷的)功能中,您就会在日志中清楚地看到问题。