繁体   English   中英

IIS7在5个请求后停止工作

[英]IIS7 stops working after 5 requests

这是我的问题:

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

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

我不相信这与此问题有关,因为我增加了浏览器的每个服务器参数的最大连接数,并且我得到了相同的行为。 此外,在一个浏览器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天而且我已经没有想法了,所以任何建议都会受到赞赏。

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

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

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

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

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

  2. 我专注于Http.sys模块,并注意到在日志文件中有很多Timer_ConnectionIdle和Client_Reset错误。

  3. 经过一些更多的实验和大量的Google搜索,我意外地找到了这个答案 ,它解决了我的问题。 由于答案表明问题是由安装AVG防病毒并在服务器上错误配置引起的。

感谢所有的帮助和建议。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM