IIS 6 Hangs ,然后应用程序池重置。附加的 IIS 调试诊断转储
Posted
技术标签:
【中文标题】IIS 6 Hangs ,然后应用程序池重置。附加的 IIS 调试诊断转储【英文标题】:IIS 6 Hangs , then app pool resets. IIS Debug Diag Dump Attached 【发布时间】:2009-07-23 18:31:14 【问题描述】:IIS 6.0 挂起,然后应用程序池在大约 3 分钟后重置。这是一个 ASP 站点,重置后它可以正常运行几秒钟,然后挂起。此 IIS 6 实例上的所有其他应用程序池均正常运行。这台机器似乎没有任何性能问题。我使用 IIS 调试诊断进行了内存转储,这是呈现的分析。任何人都可以提供一些支持吗?
分析摘要类型描述建议警告 检测到可能的阻塞或泄漏的关键部分 ntdll!LdrpLoaderLock 由线程 24 拥有 w3wp.exe__SupportSiteAppPool__PID__3960__Date__07_23_2009__Time_02_22_36PM__551__Manual 转储.dmp
这个锁的影响
66.67% 的执行 ASP 请求被阻止
22.58% 的线程被阻塞
(线程 6 22 23 27 28 29 30)
以下函数试图进入这个临界区
ntdll!LdrLockLoaderLock+133
ntdll!LdrpGetProcedureAddress+128
ntdll!LdrpInitializeThread+68
以下模块涉及此关键部分
C:\WINDOWS\system32\ntdll.dll 来自 Microsoft Corporation 动态链接库 (DLL) 的入口点函数应该执行 只有简单的初始化或终止任务,但是这个线程 (24) 正在使用 LoadLibrary API 加载 dll。遵循指导 在 DllMain 的 MSDN 文档中,以避免访问冲突和 加载和卸载库时出现死锁。
请与供应商 Microsoft Corporation 联系以获取 C:\WINDOWS\system32\mscoree.dll 警告在 asp!g_ViperReqMgr+2c 中检测到可能的阻塞或泄漏临界区,由线程 8 拥有 w3wp.exe__SupportSiteAppPool__PID__3960__Date__07_23_2009__Time_02_22_36PM__551__Manual 转储.dmp
这个锁的影响
6.45% 的线程被阻塞
(线程 7 9)
以下函数试图进入这个临界区
asp!CViperActivity::PostAsyncRequest+72
以下模块涉及此关键部分
\?\C:\WINDOWS\system32\inetsrv\asp.dll 来自 Microsoft Corporation 根据 root 确定了以下供应商进行跟进 原因分析
微软公司
请跟进上述供应商 以下方法来确定此关键部分的根本原因 问题:在应用程序验证程序下载中启用“锁定检查” 来自以下 URL 的应用程序验证程序:
Microsoft Application Verifier 通过运行以下命令为此进程启用“锁定检查”:
Appverif.exe -enable locks -for w3wp.exe 有关应用程序验证程序的详细信息,请参阅以下文档:
使用 AppVerifier 测试应用程序使用 DebugDiag 崩溃规则来监控应用程序的异常情况
【问题讨论】:
【参考方案1】:您的 ASP Classic 应用程序失败,因为所有线程都被阻止。我建议在 Web 服务器上运行 Process Monitor 以查看哪些句柄在哪里占用。我在您的堆栈跟踪中没有看到很多重复表明特定 dll 存在问题。
【讨论】:
【参考方案2】:鉴于所提供的信息,这听起来像是应用程序本身而不是 IIS 的问题。您是否确保没有任何疯狂的紧密循环或过度/极重的数据库负载,可能是一些 PInvoke 调用或只是一些不寻常的 web 应用程序正在杀死应用程序/运行时并导致池死亡?
【讨论】:
【参考方案3】:我认为您应该尝试一些工具,例如提琴手和其他工具。这样您就可以准确了解加载您的网站需要时间。从日志看来,应用程序本身存在问题。所以不要使用过多的循环,从数据库缓存数据并使用,也不要在会话或应用程序中存储大对象。
【讨论】:
【参考方案4】:我希望你不只是发布你的生产密码兄弟:)。
我同意 Quintin 的观点,似乎 ADO 提供程序中的某些东西导致了失败。
【讨论】:
以上是关于IIS 6 Hangs ,然后应用程序池重置。附加的 IIS 调试诊断转储的主要内容,如果未能解决你的问题,请参考以下文章