0

IIS 6.0 挂起,然后应用程序池在大约 3 分钟后重置。这是一个 ASP 站点,重置后它可以正常运行几秒钟,然后挂起。此 IIS 6 实例上的所有其他应用程序池均正常运行。这台机器似乎没有任何性能问题。我使用 IIS 调试诊断进行了内存转储,这是呈现的分析。任何人都可以提供一些支持吗?

分析摘要类型描述建议警告在 w3wp.exe__SupportSiteAppPool__PID__3960__Date__07_23_2009__Time_02_22_36PM__551__Manual Dump.dmp 中的线程 24 拥有的 ntdll!LdrpLoaderLock 检测到可能的阻塞或泄漏临界区

这个锁的影响

66.67% 的执行 ASP 请求被阻止

22.58% 的线程被阻塞

(线程 6 22 23 27 28 29 30)

以下函数试图进入这个关键部分

ntdll!LdrLockLoaderLock+133

ntdll!LdrpGetProcedureAddress+128

ntdll!LdrpInitializeThread+68

此关键部分涉及以下模块

来自 Microsoft Corporation 的 C:\WINDOWS\system32\ntdll.dll 动态链接库 (DLL) 的入口点函数应该只执行简单的初始化或终止任务,但是该线程 (24) 正在使用 LoadLibrary API 加载 dll。遵循 DllMain 的 MSDN 文档中的指南,以避免在加载和卸载库时出现访问冲突和死锁。

请跟进供应商 Microsoft Corporation for C:\WINDOWS\system32\mscoree.dll 警告在 w3wp.exe__SupportSiteAppPool__PID__3960__Date__07_23_2009__Time_02_22_36PM__551__Manual Dump.dmp 中的线程 8 拥有的 asp!g_ViperReqMgr+2c 检测到可能的阻塞或泄漏临界区

这个锁的影响

6.45% 的线程被阻塞

(线程 7 9)

以下函数试图进入这个关键部分

asp!CViperActivity::PostAsyncRequest+72

此关键部分涉及以下模块

\?\C:\WINDOWS\system32\inetsrv\asp.dll 来自 Microsoft Corporation 根据根本原因分析确定了以下供应商进行跟进

微软公司

请跟进上述供应商 考虑以下方法来确定此关键部分问题的根本原因: 在应用程序验证程序中启用“锁定检查” 从以下 URL 下载应用程序验证程序:

Microsoft Application Verifier 通过运行以下命令为此进程启用“锁定检查”:

Appverif.exe -enable locks -for w3wp.exe 有关应用程序验证程序的详细信息,请参阅以下文档:

使用 AppVerifier 测试应用程序 使用 DebugDiag 崩溃规则来监控应用程序的异常情况

4

4 回答 4

1

您的 ASP Classic 应用程序失败,因为所有线程都被阻止。我建议在 Web 服务器上运行Process Monitor以查看哪些句柄在哪里占用。我在您的堆栈跟踪中没有看到很多重复表明特定 dll 存在问题。

于 2009-07-23T18:49:47.287 回答
0

鉴于提供的信息,这听起来像是应用程序本身而不是 IIS 的问题。您是否确保没有任何疯狂的紧密循环或过度/极重的数据库负载,可能是一些 PInvoke 调用或只是一些不寻常的 webapp 正在杀死应用程序/运行时并导致池死亡?

于 2009-07-23T18:43:55.893 回答
0

我认为您应该尝试一些工具,例如提琴手和其他东西。这样您就可以确切地知道加载您的网站需要什么时间。从日志看来,应用程序本身存在问题。所以不要使用过多的循环,从数据库缓存数据并使用,也不要在会话或应用程序中存储大对象。

于 2009-07-23T18:47:46.727 回答
0

我希望你不只是发布你的生产密码兄弟:)。

我同意 Quintin 的观点,似乎 ADO 提供程序中的某些东西导致了失败。

于 2009-07-23T18:47:56.167 回答