我们的图像服务器遇到了一些问题。
它是运行 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