You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在CentOS的Angular+Dotnet Core应用连接Azure VM中SQL Server超时

解决CentOS上.NET Core应用连接Azure虚拟机MSSQL的连接池超时问题

一、排查连接泄漏(核心方向)

  • 检查代码中是否存在未被using包裹的SqlConnection,或异常分支里连接未正确释放的情况——比如try-catch中提前return但未处理连接,会导致连接无法回到池内。
  • 在CentOS服务器上用dotnet-counters监控连接池状态,确认是否真的是连接耗尽:
    dotnet counters monitor --process-id <你的应用进程PID> System.Data.SqlClient
    
    重点观察NumberOfActiveConnections(活跃连接数)和NumberOfFreeConnections(空闲连接数),如果活跃连接持续增长到设置的Max Pool Size上限,说明存在连接泄漏。

二、调整连接字符串适配Linux环境

  • 明确使用SQL账号认证,Linux环境不支持Windows集成认证,连接字符串配置示例:
    Server=<AzureVM_IP地址>,1433;Database=<数据库名>;User ID=<SQL账号>;Password=<密码>;Integrated Security=False;Max Pool Size=100;Connection Timeout=60;Pooling=True;Connection Reset=True;
    
    注意:不要设置Integrated Security=True或SSPI,这会导致认证失败,无效连接堆积耗尽连接池。
  • 临时关闭连接池(Pooling=False)测试,如果问题消失,说明连接池回收逻辑在当前环境有异常,再针对性调整池参数。

三、检查Azure虚拟机与SQL Server配置

  • 确认Azure虚拟机的防火墙出站规则,没有限制CentOS服务器的并发连接数——部分云防火墙会对单IP的连接数做阈值限制。
  • 登录Azure虚拟机的SQL Server,执行以下查询查看CentOS服务器的连接状态:
    SELECT session_id, connect_time, status, client_net_address FROM sys.dm_exec_connections WHERE client_net_address = '<CentOS服务器IP>'
    
    如果存在大量sleeping状态的连接,说明连接池回收机制未正常工作,添加Connection Reset=True到连接字符串可强制重置连接。

四、适配Linux环境的驱动与网络配置

  • 更新Microsoft.Data.SqlClient NuGet包到最新版本,旧版本在Linux下存在连接池回收的已知bug。
  • 用IP而非主机名连接SQL Server,避免CentOS的DNS解析延迟导致连接超时,进而占用连接池资源。

内容的提问来源于stack exchange,提问作者Aja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:54:25