我们在一对负载均衡的Azure VM上运行了一个新的ASP.NET网站。该网站相当简单,使用Kentico CMS。自上线以来的24小时内,两台Web服务器上的应用程序池突然停止了两次(相隔5-10分钟),导致503: Service unavailable
错误。
查看Windows系统日志,我看到导致问题的错误:
应用程序池' [[NAME]]'由于a而被自动禁用 服务于该应用程序池的进程中的一系列失败。
导致这是一系列警告:
为应用程序池服务的流程' [[NAME]]'遭受了致命的打击 Windows进程激活服务的通信错误。该 流程ID是[[流程ID]]'。数据字段包含错误 号。
显然这是IIS的快速失败保护措施。目前尚不清楚如何找到导致这种致命通信错误的原因"。
经过一些网络搜索,我已经安装了调试诊断工具,它帮助我确定在每种情况下相关进程都是IIS工作进程(w3wp.exe)。这个工具对我来说是新手,不幸的是,自从我安装问题以来唯一一次出现问题,没有生成任何转储。但是,它的日志包含很多这样的消息:
第一次机会异常 - 由具有系统ID的线程引起的0xe0434352: [[ID]]
令人沮丧的是,我不知道采取什么措施来复制错误条件。在非常相似的环境中,即使在负载测试下,UAT也从未发生过。以下是有关我的设置的一些事实:
任何建议都非常感谢。
*更新1 *
我现在有"致命通信错误"生成的DebugDiag转储。警告事件。转储摘要显示:
Dump Summary
------------
Process Name: w3wp.exe : C:\Windows\SysWOW64\inetsrv\w3wp.exe
Process Architecture: x86
Exception Code: 0xC00000FD
Exception Information: The thread used up its stack.
Heap Information: Present
答案 0 :(得分:3)
最后,我将此跟踪到我的代码中的错误。在非常边缘的情况下,CMS返回一个空的Guid而不是实际的ID,这导致了递归方法中的堆栈溢出。
我上面发布的0xC00000FD异常代码实际上是一个堆栈溢出异常,所以一旦我知道并下载了Debug Diagnostcs转储文件,我就能在本地复制崩溃场景。顺便说一句,该工具非常强大,能够证明崩溃的确切条件。
我可以对到达这里遇到类似问题的人说:首先,不要认为问题不在你的代码中!其次,使用Debug Diagnostcs。
答案 1 :(得分:2)
首先,您的应用池定期循环时间间隔设置& IIS中的重叠设置? - 如果在计划回收并且禁用重叠时发生这些事件,则会出现此行为。即使启用了重叠,我也猜测它与应用程序池的自动回收有些联系,因为这两个实例同时受到cca的影响。它每天发生两次,它可能导致记录您提到的警告(Here you might find how to disable logging this warning in case it is caused by automatic recycling)
如果无处可去,您可以在此处找到有关警告事件的更多详细信息: IIS Application Pool Availability
关于Debug Diagnostcs工具: How to use the Debug Diagnostics tool to troubleshoot an IIS process that stops unexpectedly