![IIS 8 服务器太忙](https://linux22.com/image/656924/IIS%208%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%A4%AA%E5%BF%99.png)
我已经研究了几个星期。我有一个 IIS 8.0 服务器托管,ASP .NET 4.0 应用程序处于经典模式。两个文件是 GET,每个请求都会读取文件系统,一个是 POST,写入文件系统。现在,我有时会从服务器收到“服务器太忙”的消息。当服务器达到此状态时,该错误是间歇性的,即,一些请求返回 200,而大多数请求返回“服务器太忙”。而且,即使重新启动 IIS 服务器也无法使其正常运行。
我读了关于此问题的可能原因。基本上,队列大小超出限制、队列中的请求超时等应该是原因。现在,有各种级别的队列,应用程序池的 HTTP.sys、ASP .Net 全局队列、应用程序(AppDomain)队列、CLR 队列。
我尝试通过同时向服务器发送大量 GET 请求来重现该错误,但根据 perfmon 的记录,队列大小似乎没有增加太多。由于这个原因,我开始收到“连接超时”的提示,但没有收到“服务器太忙”的提示。我在重现该错误时哪里出错了?是因为我每次都发送相同的请求,而该请求被 http.sys 缓存本身缓存了吗?
为了确保下次遇到此问题时能够解决,我希望定期记录各种队列大小、接收器上待处理的请求数、当前正在处理的每个 API 的请求数,即定期记录可能导致此问题的任何参数。我该怎么做?
我在 ASP .NET 日志中没有收到任何错误日志。在 HTTPERR 中,我发现很多“Timer_ConnectionIdle”错误和很少的“503 N/A”(服务不可用)。
请帮忙。提前致谢。
编辑:在跟踪“服务器繁忙”请求时,我收到了警告事件。以下是该事件的跟踪:
-MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName
IsapiModule
Notification
EXECUTE_REQUEST_HANDLER
HttpStatus
503
HttpReason
Server Too Busy
HttpSubStatus
0
ErrorCode
The operation completed successfully.
(0x0)
有人可以提供对此的见解吗?
答案1
在重现问题方面,大多数 Web 服务器(包括 IIS)处理来自一个地址/客户端的多个连接的方式与处理来自多个地址/客户端的连接的方式不同。考虑运行负载生成工具(特别是可以从负载生成器中欺骗多个并发 IP 地址或至少多个虚拟客户端的工具),以更好地了解可能发生的情况。我没有用过这个,但微软显然推荐了一个这样的工具: http://blogs.msdn.com/b/asiatech/archive/2013/01/21/how-to-perform-a-stress-test-with-wcat-tool.aspx和http://www.iis.net/downloads/community/2007/05/wcat-63-%28x64%29