最近几天,我们经常在网站上看到这样的错误信息:
“超时过期。超时时间
在获取
来自池的连接。这可能
已经发生是因为全部池化了吗
连接正在使用,马克斯泳池
规模达到了。”
我们已经有一段时间没有更改代码中的任何内容了。我修改了代码以检查未关闭的打开连接,但发现一切正常。
我怎么解决这个问题?
我需要编辑这个池吗?
如何编辑此池的最大连接数?
高流量网站的推荐值是多少?
更新:
我需要在IIS中编辑一些东西吗?
更新:
我发现活动连接的数量在15到31之间,我发现在SQL server中配置的最大允许连接数超过3200个连接,是31太多了还是我应该在ASP中编辑一些东西。网络配置?
除了公布的解决方案。
在处理1000页遗留代码时,每个代码都多次调用公共GetRS,这里有另一种解决问题的方法:
在现有的公共DLL中,我们添加了CommandBehavior。CloseConnection选择:
static public IDataReader GetRS(String Sql)
{
SqlConnection dbconn = new SqlConnection(DB.GetDBConn());
dbconn.Open();
SqlCommand cmd = new SqlCommand(Sql, dbconn);
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
然后,在每个页面中,只要关闭数据读取器,连接也会自动关闭,从而防止连接泄漏。
IDataReader rs = CommonDLL.GetRS("select * from table");
while (rs.Read())
{
// do something
}
rs.Close(); // this also closes the connection
你也可以尝试一下,解决超时问题:
如果你没有在你的webconfig中添加httpRuntime,在<system中添加。网络>标记
<sytem.web>
<httpRuntime maxRequestLength="20000" executionTimeout="999999"/>
</system.web>
and
像这样修改你的连接字符串;
<add name="connstring" connectionString="Data Source=DSourceName;Initial Catalog=DBName;Integrated Security=True;Max Pool Size=50000;Pooling=True;" providerName="System.Data.SqlClient" />
最后使用
try
{...}
catch
{...}
finaly
{
connection.close();
}
我在AWS EC2实例上也得到了这个确切的错误日志。
因为我只是部署alpha应用程序(没有真正的用户),所以没有出现连接泄漏,而且我向Activity Monitor和sp_who确认实际上没有到数据库的连接。
我的问题与AWS有关——更具体地说,与安全组有关。只有特定的安全组可以访问我存放数据库的RDS服务器。
我使用authorization -security-group-ingress命令添加了一个入口规则,允许使用——source-group-name参数访问RDS服务器的正确EC2实例。添加了入口规则,我可以在AWS UI上看到-但我得到了这个错误。
当我在AWS UI上手动删除并添加入口规则时,突然异常不再,应用程序正在工作。
除了公布的解决方案。
在处理1000页遗留代码时,每个代码都多次调用公共GetRS,这里有另一种解决问题的方法:
在现有的公共DLL中,我们添加了CommandBehavior。CloseConnection选择:
static public IDataReader GetRS(String Sql)
{
SqlConnection dbconn = new SqlConnection(DB.GetDBConn());
dbconn.Open();
SqlCommand cmd = new SqlCommand(Sql, dbconn);
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
然后,在每个页面中,只要关闭数据读取器,连接也会自动关闭,从而防止连接泄漏。
IDataReader rs = CommonDLL.GetRS("select * from table");
while (rs.Read())
{
// do something
}
rs.Close(); // this also closes the connection