我们正在尝试将 Varnish 放在我们的 IIS 7.5 场前面。所述场处理 3 个网站(SiteA、B 和 C)- Varnish 仅放在 A 前面。
当我们添加 varnish 时,我们得到了 75-90% 的命中率,但我们的 IIS 场实际上速度变慢了,以至于传递到 IIS 场的请求超时了。
但是,当我们删除 varnish 时,整个 SiteA 运行得“足够快”(响应时间约为 500 毫秒),并且我们的超时大多消失。站点 B 和 C 的性能不受影响。
IIS 中是否有一些设置需要我们调查?应用程序池超时设置为默认值 20 分钟,但由于总是这些站点的流量(整个场每秒 30-200 个请求),我印象中应用程序池超时不会成为一个因素。
以下是正常时间内 IIS 中 SiteA 的平均 time_taken/min:
当我们从 IIS 服务所有流量(绿色)然后插入 Varnish(蓝色)时,它看起来是这样的:
如您所见,在 Varnish 开始处理大部分流量后约 40 分钟,IIS(黄色)决定大幅减速。我们在一天中的不同时间点都遇到过这种情况,需要 10 分钟到 3 小时才能见证第一次大规模减速。
回收应用程序池可以让速度恢复(蓝色在 15:30 之前跳升),但最终速度又会很快减慢。删除 varnish 并将全部流量置于 IIS 集群上(蓝色下降)可以让速度恢复。
有谁知道还要监控什么和/或调整设置(IIS 或 varnish)吗?
答案1
看来我们找到了问题所在——它与 Varnish 或 IIS 无关。ASP.NET 代码中有一个错误。它被设置为创建与数据库的连接,并且在 X 分钟不活动后,它将关闭连接。错误在于它从未尝试重新打开已关闭的连接。
如果你承担了负载,这是有道理的离开系统开始崩溃。它确实需要足够的流量来保持连接畅通。