代码之家  ›  专栏  ›  技术社区  ›  kolosy

什么会导致ASP.NET停止响应

  •  2
  • kolosy  · 技术社区  · 16 年前

    我们有一个ASP.NET应用程序,它通过httpwebrequest大量使用rest/json服务,并大量使用web缓存。工作进程似乎偶尔会停止响应。浏览器坐在那里等待响应,永远不会得到响应。只有重新启动应用程序池才能解决这个问题。没有未处理的异常或我们注意到的任何其他异常。CPU和内存负载较低(<10%CPU利用率,>80%可用内存)

    唯一可能的提示是,我们在事件日志中的某一点看到了“检测到死锁”消息,但并不一致。此外,我们已经消除了我们认为唯一可能导致这种争用的原因(通过begin/end请求执行多个并发httpwebrequests)。

    有什么想法吗?

    Win 03服务器/数据中心版(在Amazon EC2上) ASP.NET 3.5

    1 回复  |  直到 16 年前
        1
  •  2
  •   Yann Schwartz    16 年前

    当您的应用程序没有响应,CPU使用率很低时,很可能是并发问题。您要么有导致所有线程暂停的死锁,要么您的异步线程需要花费很长时间才能完成,而线程池最终会耗尽。因为您运行的是ASP.NET,所以应该检查线程池的运行情况。您可以观察性能计数器,或者更好地使用windbg连接到应用程序(您可以从Windows的调试工具中获得它 http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx )

    启动windbg,附加到ASP.NET进程,然后在命令提示下:

    .loadby mscorwks sos
    !ThreadPool
    

    更好的是,下载sosex扩展( http://www.stevestechspot.com/CommentView,guid,9fdcf4a4-6e09-4807-bc31-ac1adf836f6c.aspx )检查是否有死锁

    !dlk
    

    检查哪些是线程阻塞,切换到其中一个线程(使用UI或命令行)并键入

    !CLRStack
    

    让堆栈跟踪显示阻塞应用程序的方法。

    推荐文章