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

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

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

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

干杯!

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

【问题讨论】:

标签: c# asp.net iis-7.5 c#-2.0 asp.net-2.0


【解决方案1】:

【讨论】:

    【解决方案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) 来模拟实时系统。仅当这不起作用时,请尝试转到实时系统。
    • 我终于找到了问题所在。这是使用静态类的静态功能的遗留代码。当网站上的访问者数量增加时,就会发生这种情况。在我将该代码更改为使用实例而不是静态后,问题就解决了。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多