如何找到 ASP.Net 网站中的死锁

Posted

技术标签:

【中文标题】如何找到 ASP.Net 网站中的死锁【英文标题】:How to find the deadlock in ASP.Net Website 【发布时间】:2012-07-19 09:04:20 【问题描述】:

我正在使用 .Net 2.0,并且我的网站似乎在某个时期达到了死锁状态。它停止工作,直到我回收应用程序池或更改 web.config 文件中的某些内容。我认为死锁导致了这个问题。

我想知道是否有任何工具可以调试/检查站点以查找可能导致死锁的代码。

现在我不得不将回收间隔设置为 10 分钟,这确实很糟糕,但这是解决问题的唯一方法,并且网站上有很多代码,我需要找到问题所在。如果我使用 DOS 攻击工具,我能否找到导致此问题的页面/代码块?如果可以,最好的测试工具是什么?

干杯!

编辑 我试图检查事件日志并发现以下警告。我不知道它是否是问题将继续挖掘。 异常信息: 异常类型:HttpException 异常消息:请求超时。

【问题讨论】:

第 9 频道的这一系列视频涵盖了这个(以及密切相关的主题):“.NET Debugging for the Production Environment”。 【参考方案1】: 检查事件日志 开启Health Monitoring

【讨论】:

【参考方案2】:

如果您使用“失败的请求跟踪”,它会产生一个很好的输出,然后会告诉您导致错误的原因,直至模块级别。然后,这将为您提供崩溃的第一步。

在 iis.net 上阅读这篇文章 → Troubleshooting Failed Requests Using Tracing in IIS 7

【讨论】:

谢谢。我一上服务器就试试看。【参考方案3】:

我会将 Visual Studio 附加到 IIS 并在发生死锁时中断调试器。然后您可以检查正在运行的线程的调用堆栈。

代码项目有一个nice article on how to do IIS remote debugging。

当然,您可以很好地设置一台带有本地 IIS 和本地 Visual Studio .NET 的测试机器,并且无需远程调试即可完成此操作。

【讨论】:

我尝试将 Visual Studio 附加到 IIS 进程,但它显示“无法附加到进程。64 位调试器的组件未注册。请通过以下方式修复 Visual Studio 2008 远程调试器安装“添加或删除程序”。看来我们必须要求我们的托管设施升级服务器上的 Visual Studio。 @JonasT 首先,我宁愿设置一台本地机器 (VMware) 来模拟实时系统。仅当这不起作用时,请尝试转到实时系统。 我终于找到了问题所在。这是使用静态类的静态功能的遗留代码。当网站上的访问者数量增加时,就会发生这种情况。在我将该代码更改为使用实例而不是静态后,问题就解决了。

以上是关于如何找到 ASP.Net 网站中的死锁的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地将巨大的 sql 表加载到 asp.net 应用程序内存中以进一步迭代它?

ASP.NET Web API 身份验证(Web + 移动)

Jquery禁用Asp.net核心中的选定选项无法正常工作

win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NE

表单身份验证、ASP.NET MVC 和 WCF RESTful 服务

使 asp.net 单选按钮列表显示为引导按钮组