提供静态内容的 IIS 随机给出 503

提供静态内容的 IIS 随机给出 503

我们的图像服务器遇到了一些问题。

它是运行 IIS 7.5 的 Win 2008,它仅提供静态内容:图像。

它已经运行了很长一段时间而没有问题,直到最近我们禁用了输出缓存,因为我们注意到启用它意味着它向客户端发送无缓存主机头(强制它们每次都从服务器获取图像)

我们已经阅读了大量有关它的内容,并且看来 IIS 就是按照这种方式工作的 - 要么使用输出缓存,要么使用缓存主机头。

无论如何,禁用输出缓存后,我们现在会经历随机的 5 分钟间隔,在此期间所有请求都只会收到 503 服务不可用。在此期间,“缓存的文件”性能计数器会交错(既不增加也不减少),并且在此期限之后所有缓存都会被刷新。

您可能会觉得我谈论缓存很奇怪,因为我们禁用了输出缓存。

问题是我们在注册表中更改了 ObjectTTL 参数,因此我们将文件缓存 3 分钟(效果很好,我们的磁盘 I/O 显著下降)

因此,即使禁用输出缓存,我们仍然会缓存大量文件 - 如果我们能够摆脱随机 503,那就太完美了 :-D

在这些 503 间隔内,我们没有在 Windows 事件日志中收到任何消息,因此我们不知道该怎么办。

欢迎任何想法:-)

答案1

也许问题在于 RequestQueue/ConcurrentRequest 限制。考虑一下这个 Stack Overflow 问题上接受的答案的设置:

实现 IHttpAsyncHandler 的通用处理程序 (.ashx) 导致 IIS 7.0 503 错误

要消除 503 错误,需要进行 3 项不同的配置更改:

机器.配置:

<configuration>
...  
   <system.web>  
    ...  
      <processModel enable="true" requestQueueLimit="100000"/>

IIS 管理器 > 应用程序池 > 高级设置

Queue Length : 65535

最后(拼图中缺失的一块),命令行:

appcmd.exe set config /section:serverRuntime /appConcurrent

答案2

我们最终解决了这个问题。

这显然是由于 IIS 检查子目录中的 web.config 更改而导致的。

通过在我们的 applicationhost.config 文件中设置 allowSubDirConfig="false",问题就解决了。

但这有点奇怪,因为我们没有超过 1 个 web.config 文件,而且它位于项目的根目录中 - 如果它仍然有效,为什么要抱怨:-D

相关内容