sql server连接池爆满排查解决定位

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
目前发现 部署的webapi无法登录了,但是我这边自己本地跑发现可以登录,临时解决办法是webapi那边重启。
但是由于是本地代码 无法反射定位内存泄露。。

这个方法是行不通了

using System;
using System.Data.SqlClient;
using System.Reflection;

class Program
{
    static void Main()
    {
        var conn = new SqlConnection("YourConnectionStringHere");
        conn.Open();

        // 通过反射获取 SqlConnection 内部的连接池状态
        var type = typeof(SqlConnection);
        var connectionFactoryField = type.GetField("s_connectionFactory", BindingFlags.NonPublic | BindingFlags.Static);

        if (connectionFactoryField != null)
        {
            var connectionFactory = connectionFactoryField.GetValue(null);
            var poolGroupField = connectionFactory.GetType().GetField("_poolGroupList", BindingFlags.NonPublic | BindingFlags.Instance);
            var poolGroup = poolGroupField.GetValue(connectionFactory);
            
            Console.WriteLine(poolGroup?.ToString());
        }

        conn.Close();
    }
}

改大连接池

"YourConnectionStringHere;Max Pool Size=200;"

最后还有一个死办法

[HttpGet("relese")]
        public string release(string pwd)
        {
            if (pwd == "aaaaaaaaa") {
               
                SqlConnection.ClearAllPools();
                return "OK";
            }
            else {
                return "无法释放 密码错误";
            }
        }

但是这些方法都不行,下面的方法彻底定位解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值