ASP.NET Core应用连接池超时排查:性能监视器SqlServer数据提供器计数器无实例
以下是针对Windows Server 2016 + ASP.NET Core场景的排查和解决步骤:
重新注册SQL Server数据提供器计数器
以管理员身份打开命令提示符,执行以下命令重新注册相关性能计数器:lodctr /R:sqlctr.ini若
sqlctr.ini不在默认路径(C:\Windows\System32),需指定完整路径(通常位于SQL Server安装目录的Tools\Binn下)。确认应用使用的SqlClient库及对应计数器分类
ASP.NET Core应用现在多使用Microsoft.Data.SqlClient而非旧版System.Data.SqlClient,前者对应的性能计数器分类为Microsoft.Data.SqlClient而非.NET Data Provider for SqlServer。检查项目依赖后,尝试在性能监视器中查找对应分类的计数器。启用性能计数器服务
打开services.msc,确保以下服务处于运行状态:- Performance Counter DLL Host Service(
PerfHost) - Performance Logs & Alerts(
SysmonLog)
若未运行,启动服务并设置为自动启动。
- Performance Counter DLL Host Service(
显式启用.NET Core应用的SqlClient性能计数器
在应用的Program.cs中添加代码,强制启用性能计数器:var builder = WebApplication.CreateBuilder(args); // 启用Microsoft.Data.SqlClient性能计数器 AppContext.SetSwitch("Microsoft.Data.SqlClient.EnablePerformanceCounters", true); // 后续配置代码... var app = builder.Build();重启应用后,再次尝试添加计数器。
检查运行权限
右键性能监视器,选择「以管理员身份运行」后再尝试添加计数器,避免因权限不足无法读取实例信息。重建系统性能计数器库
若以上步骤无效,尝试重建整个性能计数器体系:- 管理员命令提示符执行
lodctr /R,重置所有系统性能计数器 - 执行
winmgmt /resyncperf,同步WMI与性能计数器数据 - 重启服务器后再次验证
- 管理员命令提示符执行
排查AWS EC2环境特殊性
检查EC2实例是否有自定义的组策略或AWS Systems Manager配置禁用了性能计数器;确认实例未被限制性能监控相关的系统调用。
内容的提问来源于stack exchange,提问作者user75893

