堆栈溢出导致 IIS 应用程序池随机崩溃

IIS Application Pool randomly crash cause by stack overflow

我们在 IIS 7.5 和 Windows 2008 R2 SP1 上有一个 .net web api 应用程序 运行。 这个月以来我们的网站随机崩溃自动重启,而且总是连续崩溃3次。 Global.ascs 中的 Application_Error 没有捕获到 CLR 异常,只有 windows 事件查看器中的异常代码为 0xc00000fd 的应用程序错误。

我们尝试使用DebugDiag1.2记录调用堆栈,有明显的死循环但我们不知道是什么原因。这是日志内容:

 警告 - DebugDiag 无法找到 clr.dll 的调试符号,因此以下信息可能不完整。

 w3wp__WeiXinService__PID__3688__Date__10_20_2016__Time_10_47_28AM__341__Second_Chance_Exception_C00000FD.dmp C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 中 clr!CreateHistoryReader+1694f8 处的汇编指令在尝试执行时导致堆栈溢出异常 (0xC00000FD)写入线程 32 上的内存位置 0x10992f10

这是 .NET 调用堆栈


    函数 Arg 1 Arg 2 Arg 3 Arg 4 来源
    clr!CreateHistoryReader+1694f8 b4231457 10993fa0 00000000 00000000
    clr!CreateHistoryReader+141f2 b42314e3 007c8ef8 77224744 007c8f00
    clr!GetMetaDataInternalInterfaceFromPublic+abc7 10993fa0 00000001 10994058 10994058
    ntdll!RtlGetProcessHeaps+49d 007c8ef8 109940a8 00000000 10994040
    ntdll!RtlCaptureContext+187 10994058 109940a8 109945c8 00000001
    ntdll!RtlMoveMemory+416 10994058 109940a8 10994058 109940a8
    ntdll!KiUserExceptionDispatcher+f e0434352 00000001 00000005 109945c8
    clr!CopyPDBs+15478 00000000 b4236dbb 028de0c0 00000011
    clr!CopyPDBs+160b6 028dcae8 028dc9c8 6f1d5643 01eed478
    System_Xml_ni+42422e 028ddff0 00000471 028dc9c8 1099473c
    System_Xml_ni+42587f 00000471 000004cb 028dcc78 0000005d
    System_Xml_ni+63ee52 10994758 1099475c 0000045a 00000035
    System_Xml_ni+d78cf 028dc9c8 028dc86c 109947b4 6ee835bc
    System_Xml_ni+d55b7 028da224 028ddfd4 028cdabc 109947ac
    System_Xml_ni+d35bc 109947e0 6ee844d6 00000000 028cdabc
    System_Xml_ni+10123a 028dc998 028dc86c 00000000 00000000
    System_Xml_ni+e2eb4 00000001 028dbec8 028cde94 028da248
    System_Xml_ni+100c09 028cde94 028cdabc 028cac60 109948ec
    mscorlib_ni+2f704d 028cdb64 028cdb58 015de390 00000000
    0x0e7df9eb 0ff00dd0 028cac60 00000000 00000000
    0x0ff5b196 028ca6d0 028caa50 05f7facc 10994a2c
    0x0ff5bac2 028ba4a4 028ba0cc 028b7270 10994a78
    mscorlib_ni+2f704d 028ba174 028ba168 015de390 00000000
    0x0e7df9eb 0ff00dd0 028b7270 00000000 00000000
    0x0ff5b196 028b6ce0 028b7060 05f7facc 10994bb8
    0x0ff5bac2 028a6ab4 028a66dc 028a3880 10994c04
    mscorlib_ni+2f704d 028a6784 028a6778 015de390 00000000
    0x0e7df9eb 0ff00dd0 028a3880 00000000 00000000
    0x0ff5b196 028a32f0 028a3670 05f7facc 10994d44
    0x0ff5bac2 028930c4 02892cec 0288fe90 10994d90
    mscorlib_ni+2f704d 02892d94 02892d88 015de390 00000000
    ...
    ...
    这重复了数百次
    ...
    ...
    mscorlib_ni+2f704d 0628182c 06281820 015de390 00000000
    0x0e7df9eb 0ff00dd0 0627c91c 00000000 00000000
    0x0ff5b196 0627c38c 0627c70c 05f81618 109ce104
    0x0ff5bac2 06269c18 05fcbb00 0625e45c 109ce150
    mscorlib_ni+2f704d 062698e8 062698dc 015de390 00000000
    0x0e7df9eb 0ff00dd0 0625e45c 00000000 00000000
    0x0ff5b196 0625be94 0625e24c 05f81618 109ce290
    0x0ff5bac2 0622ffb4 05fc9b4c 06201454 109ce2dc
    mscorlib_ni+2f704d 0622fc04 0622fbf8 015de390 00000000
    0x0e7df9eb 0ff00dd0 06201454 00000000 00000000
    0x0ff5b196 061f7b64 109ce518 109ce528 0ff5a455
    0x0ff5af35 109cf388 72b8a75d 109cf40c 00c0139c
    0x0ff5a455 00000000 00000000 00000000 00000000
    0x0ff59a36 00000000 00000000 00000000 00000000
    0x0ff52fe3 05fb3920 05f480bc 0ff50bc5 05fb38a4
    0x0e8602c1 05fb38a4 0fc0fd31 05fb38a4 00000000
    0x0ff50a07 05fa0afc 0605d4a0 00000000 00000000
    0x0fc0f8a4 01f4bf54 00000000 00000000 01f4bf54
    0x0fc0f7d7 00000000 00000000 00000000 00000000
    0x0fc0f767 05fa0afc 0fc0f690 109ceba8 0fc09096
    0x0fc0f6a5 05fa0afc 109cec20 05fa3338 05f18394
    0x0fc09096 01f4bf54 00000000 00000000 01f4bf54
    0x0fc07d8f 00000000 00000000 00000000 00000000
    0x0fc07d1f 05fa0afc 7cfc31f3 0606cd6c 0606cbfc
    0x0fc048d2 05fa0afc 109ced6c 00000000 00000000
    0x0fc02108 05fa0afc 6aee2dcc 060322f0 0602e8ac
    System_Net_Http_ni+1d328 05fa0afc 109ceec4 109cee3c 109cee4c
    System_Net_Http_ni+1d4da 05fa0afc 00000000 109ceec4 00000000
    0x0fc001d5 05fa0afc 6aed5938 109cefd8 109cefd8
    System_Net_Http_ni+1d328 6aed5938 109cefd8 109cefd8 109cef60
    0x05fa0afc 109cefd8 109cefd8 109cef60 0eccf7d1
    System_Net_Http_ni+15938 109cefd8 109cef60 0eccf7d1 05fa0afc
    0x109cefd8 109cef60 0eccf7d1 05fa0afc 109cefd8
    0x109cefd8 109cf040 6fdd1d74 0603221c 06048d40
    System_Web_ni+8b1d47 0603221c 06048d40 01f88e50 109cf058
    System_Web_ni+8b1d74 00000000 05f9be18 01f4b5a8 01f4f05c
    System_Web_ni+8b1cfe 00000000 01f4f07c 01f8c08c 06048d10
    System_Web_ni+b20c7a 6fd728d5 6f610744 01f94f48 109cf0d4
    System_Web_ni+1c977c 109cf190 01f904c4 00000000 01f4f280
    System_Web_ni+1db817 00000000 00000000 109cf220 109cf22c
    System_Web_ni+1c99c0 01f09500 109cf214 109cf2e4 7cfc31f3
    System_Web_ni+1c649b 01f4b5a8 7cfc31f3 72a3acd8 109cf40c
    System_Web_ni+1cb931 00000000 0000000b b426d8e3 00000000
    System_Web_ni+1cb63f 0eef9ee0 109cf3cc 72b8e8cd 109cf524
    clr+26f0 109cf524 00000010 0085afe0 01cb1cb8
    clr!复制PDBs+1ad6a 109cf4b8 b426dffb 01cb1cce 00000002
    clr!StrongNameFreeBuffer+1af95 00000002 72b8e85c 109cf4b8 01000001
    clr!复制PDBs+1acd8 00bf1184 0154a12c 0000000b 00000000
    webengine4!W3_MGD_HANDLER::ProcessNotification+5a 7306aa00 7417a2f4 109cf598 72b8147a
    webengine4!ProcessNotificationCallback+32 0154a12c b426de0b 109cf5c5 109cf5c7
    clr!CopyPDBs+d917 109cf5c5 109cf5c7 00020002 0eef9ee0
    clr!GetMetaDataInternalInterfaceFromPublic+29800 00000000 109cf74c 10072d30 b4728db1
    clr!GetMetaDataInternalInterfaceFromPublic+1b084 0eeeeac0 109cfa7c 771592e2 0eeeeac0
    kernel32!BaseThreadInitThunk+e 0eeeeac0 bff8c0ad 00000000 00000000
    ntdll!RtlInitializeExceptionChain+63 72bca8c0 0eeeeac0 ffffffff 771e7707
    ntdll!RtlInitializeExceptionChain+36 72bca8c0 0eeeeac0 00000000 00000000

非常感谢您的意见,我们终于找到问题并解决了。不幸的是,我们在中国大陆无法直接访问 Google。您的意见对我们帮助很大。

使用 WinDbg 加载崩溃转储可以显示托管 .Net 堆栈跟踪。