IIS 10 应用程序池回收触发多个 SQL 连接超时和 503 错误

IIS 10 application pool recycle triggers multiple SQL connection timeouts and 503-errors

将基于 .NET 的网站(基于 Dotnetnuke / DNN)移动到新服务器后,当应用程序池被回收时我开始看到多个错误,而网站在几分钟内变得不可用:

System.InvalidOperationException:超时已过。在从池中获取连接之前超时期限已过。这可能是因为所有池连接都在使用中并且达到了最大池大小

错误在:System.Data.ProviderBase.DbConnectionFactory.TryGetConnection

在高峰时段,该错误可能会在事件日志和网站中出现数百次 returns 向用户显示通用的“503 不可用”错误(而不是错误页面的自定义、用户友好版本).

Web 应用程序未更改并且在移动之前一直运行良好,所以我很确定这不是由于错误的编码导致数据库连接处于打开状态。在旧服务器(和本地开发环境)上,站点在回收时将变得无响应,即用户等待 20-30 秒,直到站点启动并 运行。没有抛出异常,绝对没有最终用户错误。

新旧服务器环境的主要区别在于:

新:

旧:

我怀疑这与处理连接到位于单独服务器上的远程 SQL 服务器的方式不同有关。或者它可能与 IIS 回收应用程序池的方式有关,导致在关闭现有版本的同时启动 Web 应用程序的新实例时出现问题。

有什么想法吗?

编辑:

我尝试通过向连接字符串添加 "Max Pool Size=500" 来增加最大池大小。没有效果。 在重新启动 Web 应用程序时使用 perfmon 监视活动连接数:在回收期间它增加到大约 80 个连接(从大约 25-30 个)。 IE。没有接近最大池大小的地方。

更新:我没有找到这个问题的根本原因,但是通过返回到单服务器设置而不是将 Web 和数据库分离到两个不同的服务器中解决了这个问题。

SQL 服务器直接安装在网络服务器上,数据库已移动。从那以后就没有出现过与连接相关的错误。