【发布时间】:2019-03-22 19:12:11
【问题描述】:
应用程序:ASP.NET、C#
框架:4.6.2
身份验证模式:- Windows 身份验证-允许。
平台:64 位
服务器:Win-2012
IIS:8.5
正在迁移到 Azure 平台。在测试阶段——自动化测试工具,发送快速请求。这些请求可能是虚拟请求、恶意请求、页面不存在、插入了 javascript 的页面或带有错误参数的现有页面。等等。基本上工具会尝试破坏/破解您的应用程序。不知何故,一旦这个工具开始测试,我们的应用程序池就会崩溃。有时它会运行一段时间,但不会持续很长时间。在测试过程中,我们监测到 IIS 工作进程频繁崩溃。
手动浏览器测试工作正常。
我尝试了以下方法:
1. 验证CPU和内存使用情况,正常。
2.经过验证的http日志:捕获的请求显示正确的错误代码。例如。不退出的页面显示500,很多请求显示未经授权的401.1,一些正确的请求也会显示200。
3. 应用程序设置为 Windows Authentication-Allow 模式。自动化测试工具使用一些有效的凭据。虽然我们看到很多请求都是未经授权的。
4. 尝试使用不同的机器和不同的用户凭据,每次 IIS 崩溃。
5. 问题在 DEV 和 UAT 环境中均可重现。
6. 能够提取故障转储,但目前无法读取/调试它。研究如何阅读它们。
7. 应用程序正在将日志写入数据库。但这也不是昂贵的操作。这可能不是根本原因。因为有时第一个或第二个请求也会开始失败。
8. 与通过此类测试的应用程序相比,我们的配置没有什么特别之处。
9. 尝试每秒更改请求数。它没有帮助。
10. 已验证的应用事件日志:主要显示以下2个错误。
A) 错误应用程序名称:w3wp.exe,版本:8.5.9600.16384,时间戳:0x5215df96
错误模块名称:ntdll.dll,版本:6.3.9600.19153,时间戳:0x5b93ffa7
异常代码:0xc00000fd
故障偏移:0x0000000000030461
错误进程 ID:0x4d48
错误的应用程序路径:C:\windows\system32\inetsrv\w3wp.exe
错误模块路径:C:\windows\SYSTEM32\ntdll.dll
B) 与 clr.dll 相同的错误。
因此无法找到工作进程不断崩溃的确切原因。 IIS 将允许连续 5 次回收然后停止这样做,然后应用程序将保持不可用状态(503 错误)。 感谢任何建议/提示,以解决根本原因。
【问题讨论】:
-
如果有帮助,0xc00000fd 是“STATUS_STACK_OVERFLOW”。在正常浏览行为期间未执行的错误处理中可能出现问题。几年前,我遇到了一个问题,错误记录功能由于权限而失败并捕获了一个异常,该异常调用了错误记录功能来记录错误 - 导致无限递归循环 - 导致堆栈溢出。不确定这是否是你的情况,但从那以后它就一直困扰着我。
-
感谢@Wiz 的快速响应。我已经验证过了。日志记录在数据库和基于文件的文件中成功发生。基本上工具只是发送快速错误的请求。应用程序使用它自己的服务帐户登录到具有正确权限的文件/数据库,因此能够成功登录。最初我认为它会有负载/溢出,但是很少有请求也会失败。但是我同意 0xc00000fd 它是溢出的,但它在哪里。我无法找到。谢谢。
-
如果您对崩溃分析没有经验,请通过support.microsoft.com打开支持案例
-
@Wiz,当我重新访问日志记录代码时,看起来我得到了一些线索。正在努力,会及时通知您。
-
我得到了故障转储日志,我可以看到一些递归代码/调用。最后它显示如下。有人可以确认这是企业库的问题还是我们代码的问题? ntdll.dll!RtlpReAllocateHeap() ntdll.dll!RtlReAllocateHeap() mscorlib.ni.dll!00007ffc589e6929() [管理到本机转换] mscorlib.dll!System.RuntimeTypeHandle.GetTypeByName() mscorlib.dll!System.Type.GetType( ) Microsoft.Practices.EnterpriseLibrary.RetrieveConfigurationElementType() MS.Entp.OnDeserializeUnrecognizedElement() System.Configuration.ConfigurationElement.DeserializeElement()
标签: asp.net azure iis-8.5 w3wp