IIS7在5个请求后停止工作

时间:2012-01-19 16:31:02

标签: c# asp.net iis

这是我的问题:

我刚刚参加了一个庞大的asp.net C#项目,我一直负责修复一些性能问题(不是我的专业领域)。更具体地说,在5-7次重定向/ ajax调用后,Web服务器停止响应,整个页面(最终浏览器)冻结。

我不认为这是一个编码问题,因为我在几页(Page_Load方法)中设置了断点,在5个请求之后它甚至没有达到断点。

我不相信这与this issue有关,因为我增加了浏览器的每个服务器参数的最大连接数,并且我得到了相同的行为。此外,在一个浏览器IE中的这5个请求之后,应用程序也停止在FF中工作。

这不是资源问题,因为w3wp.exe进程永远不会超过500MB内存。

使用Fiddler和其他工具监控请求时,我注意到的一件事是服务器在加载图像文件(png,jpg)时需要很长时间。我不知道这是否相关。

我已经在服务器上启用了失败的请求跟踪,我唯一注意到的是,有些请求因401错误而失败,即使我已将匿名身份验证设置为启用。 这是确切的消息

MODULE_SET_RESPONSE_ERROR_STATUS 

 ModuleName     ManagedPipelineHandler 

 Notification   128 
 HttpStatus     401 
 HttpReason     Unauthorized 
 HttpSubStatus  0 
 ErrorCode      0 

 ConfigExceptionInfo

 Notification   EXECUTE_REQUEST_HANDLER

 ErrorCode       The operation completed successfully. (0x0)

有时会使用ModuleName抛出此消息:ScriptModule

我已经在这件事上浪费了2天而且我的想法已经用完了所以任何建议都会受到赞赏。

4 个答案:

答案 0 :(得分:4)

与任何大型通用问题一样,诊断问题的最佳方法是弄清楚如何将问题分解为更小的部分,如何假设问题,以及如何验证或使您的假设无效。我的第一个倾向是假设这个特定的服务器端进程需要很长时间,导致客户端请求被阻塞,使整个事情看起来冻结。

从那里,我将尝试通过创建隔离的客户端测试来复制长时间运行的服务器端进程 - 也许如果URL是HTTP获取,我将单独测试相同的URL。如果它们是HTTP帖子,我会创建一个单独的测试表单,如果可行的话,看看每个请求会发生什么。如果找到长时间运行的服务器端进程,那么您有一个起点。

如果没有长时间运行的服务器端进程,则可能需要查看JavaScript /客户端编码问题。但是当你在一个大型的,不熟悉的项目上工作时,最好的办法就是找出如何将问题分解成可以进行测试的较小组件

答案 1 :(得分:2)

我终于解决了这个问题。这是我做的:

  1. 使用IIS设置和App_Pool回收进行实验,并注意到它处理实际到达请求的方式没有任何问题。

  2. 我专注于Http.sys模块,并注意到日志文件中存在大量的Timer_ConnectionIdle和Client_Reset错误。

  3. 经过一些更多的实验和大量的Google搜索后,我意外地发现了answer并解决了我的问题。正如答案所示,问题是由安装了AVG防病毒软件并在服务器上配置错误造成的。

  4. 感谢所有的帮助和建议。

答案 2 :(得分:0)

如果是导致浏览器冻结的ajax调用,请确保它们不是blocking ajax调用。

答案 3 :(得分:0)

只是附上Shan的答案,这是一个很好的答案。

首先,显然存在代码问题,因为这绝不是IIS的“正常”行为。

那就是说,你必须像Shan指出的那样隔离它。例如,鉴于服务器本身不再接受连接,那么我们可以很好地消除javascript作为问题的根源并将其降级为仅仅是一种症状。

通常,当工作进程像这样旋转到空间时,这是由于无限循环或多个线程试图锁定同一资源的问题。我敢打赌,如果你让它运行得足够长,IIS本身就会超时,杀死并重启这个过程。

考虑到这一点,你想要寻找任何类型的多线程垃圾(我强烈建议你在Web服务器中做)或任何指示紧密无限循环的东西。如果单独执行请求,循环将变得明显。如果碰巧发生碰撞,只会出现多线程问题。

在Web服务器上运行各种性能计数器。此外,一旦它锁定,让它坐下来一段时间。一旦IIS在工作进程上执行它自己的重置,请在事件日志中查找指示符。