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

问题描述 投票:0回答:1

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

System.InvalidOperationException:超时已过期。从池中获取连接之前已经过超时时间。这可能是由于所有池化连接都在使用中,并且已达到最大池大小而发生的]

错误位于:System.Data.ProviderBase.DbConnectionFactory.TryGetConnection] >>

在高峰时段,错误可能会在事件日志中发生数百次,并且网站向用户返回了通用的“ 503不可用”错误(而不是错误页面的自定义,用户友好版本)。

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

新旧服务器环境之间的主要区别是:

新:

  • 一台具有多个虚拟服务器的Hyper-V主机:
  • 带有IIS 10的Windows Server 2019(虚拟服务器)
  • SQL Server 2014(虚拟服务器)

    旧:

    • 具有IIS 7.5的单个Windows Server 2008 R2
    • 直接在Web服务器上本地安装SQL Server 2014

    我怀疑这与处理与位于单独服务器上的远程SQL Server的连接的方式不同有关。也许与IIS回收应用程序池的方式有关,导致在关闭现有版本的同时旋转Web应用程序的新实例时导致问题。

    有什么想法吗?

    编辑:

    我已经尝试通过将“ Max Pool Size = 500”添加到连接字符串来增加最大池大小。没有效果。重新启动Web应用程序时,使用perfmon监视活动的连接数:在回收期间,它会增加到大约80个连接(从大约25-30个连接)。即在最大池大小附近没有位置。

将基于.NET的网站(基于Dotnetnuke / DNN的网站)移至新服务器后,当应用程序池被回收而该网站因几个原因而无法使用时,我开始看到多个错误。

一个更新:我没有找到此问题的根本原因,但是通过回到单服务器设置而不是将Web和DB分为两个不同的服务器来解决。

SQL Server直接安装在Web服务器上,并且数据库已移动。此后没有任何与连接有关的错误。

.net sql-server iis connection-pooling application-pool
1个回答
0
投票

一个更新:我没有找到此问题的根本原因,但是通过回到单服务器设置而不是将Web和DB分为两个不同的服务器来解决。

SQL Server直接安装在Web服务器上,并且数据库已移动。此后没有任何与连接有关的错误。

© www.soinside.com 2019 - 2024. All rights reserved.