IIS会话挂起 - 如何解决“网站泄漏资源到终结者”?

时间:2011-02-11 11:13:04

标签: c# iis session hang

我遇到与用户报告eggheadcafe完全相同的问题,但在阅读以下答案后不知道要采取什么步骤。:

  

你应该追究两个问题:   1.为什么网站将资源泄漏给终结者。那是   坏   2.什么是Oracle代码等待 - 使用Oracle的支持

这就是问题所在:

  

我有一个间歇性的问题   IIS6上托管的网站(w2k3 sp2)。

     

我似乎随机发生在用户身上   当他们点击其中的超链接时   页面。请求被发送到   Web服务器,但永远不会响应   回。如果用户试图   导航到他们的另一个超链接   不能(即网站出现   为该用户挂起)。其他用户   当时的网站不是   受此挂起影响并且如果是用户   随着问题打开一个新的http   会话(关闭IE并打开   网站再次)他们不再   体验悬念。

     

我已经安装了一个调试器(IISState)   w3wp进程如下   输出。带有“Thread”的条目   等待锁被释放。   寻找锁主人。“看起来像   他们可能会导致这个问题。能够   任何人都知道这个过程锁定了什么   等等?

     

由于

http://www.eggheadcafe.com/software/aspnet/33799697/session-hangs.aspx

在我的情况下,我的.Net C#MVC应用程序针对数据的MySQL数据库和.Net成员的MS SQL数据库运行。

我希望有更多IIS知识的人可以帮助解决这个问题。

3 个答案:

答案 0 :(得分:1)

听起来您的数据库调用中存在竞争条件,导致数据库级别出现死锁。您可能希望查看应用程序池中用于数据库连接的设置。可能你需要在某个地方放一些支票或重新定义程序以减少比赛的可能性:

http://msdn.microsoft.com/en-us/library/ms178104.aspx

答案 1 :(得分:0)

我会解释由于会话序列化而导致的经历挂起。不是关于从某些来源保存/加载它的部分,而是ASP.NET不允许同一会话同时执行两个并行页面,除非它们使用只读会话执行。后者在页面指令或web.config中完成,方法是设置EnableSessionState =“ReadOnly”。

您的问题仍然存在,这不会改变第一个线程挂起。我将验证您的数据库连接是否正确处理。但是,您在问题中从未提及任何Oracle数据库(仅限Mysql和SQL Server)。你为什么要使用Oracle驱动程序? (这似乎是开始调试的有效位置。)

然而,正如David Wang在你的链接问题的回答中所述,问题的第二部分是一个永不释放的锁。您需要Oracle(或其源代码)的支持才能进一步调试。

答案 2 :(得分:0)

IIS挂起并不令人惊讶。 IISState已过期,您可以使用Debug Diag,

http://support.microsoft.com/kb/919791(如果CPU使用率很高) http://support.microsoft.com/kb/919792(否则)

挂起转储应该告诉你什么是根本原因。

如果您不熟悉这些技巧,Microsoft支持可以帮助分析转储。 http://support.microsoft.com