什么可以导致asp.net停止响应

时间:2009-11-11 17:58:43

标签: asp.net-3.5

我们有一个asp.net应用程序,它通过httpwebrequest大量使用REST / json服务并大量使用Web缓存。看似零星的,工人流程只是停止响应。浏览器坐在期待响应,永远不会得到一个。只有应用程序池重新启动似乎可以解决问题。没有未处理的异常或我们注意到的任何其他异常。 cpu和内存负载很低(< 10%cpu util,> 80%可用内存)

我们唯一可能的提示是,我们在一个点上看到了事件日志中的“检测到死锁”消息,但并非一致。另外,我们已经消除了我们认为这种争用的唯一可能原因(通过开始/结束请求执行多个并发httpwebrequest)。

任何想法?

win 03服务器/数据中心版(亚马逊ec2上) asp.net 3.5

1 个答案:

答案 0 :(得分:2)

如果您使用的cux低响应的非响应应用程序,则很可能是并发问题。您要么死锁会导致所有线程停顿,要么异步线程需要永久完成,并且ThreadPool最终会挨饿。由于您运行的是ASP.Net,因此应该检查ThreadPool的运行方式。您可以使用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

有一个堆栈跟踪,显示哪个方法阻止了您的应用程序。