【问题标题】:How to detect connection pool issues in Hangfire?如何检测 Hangfire 中的连接池问题?
【发布时间】:2021-12-21 15:59:07
【问题描述】:

我们不时在日志中看到来自 Hangfire 的以下错误:

Execution BackgroundServerProcess 由于异常在 1.12:52:00.6668371 仍处于 Failed 状态,将在 00:00:15 内重试 System.InvalidOperationException:超时已过期。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 重试,DbConnectionOptions userOptions)在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 重试)在 System.Data.SqlClient.SqlConnection .Open() 在 Hangfire.SqlServer.SqlServerStorage.CreateAndOpenConnection() 在 Hangfire.SqlServer.SqlServerStorage.UseConnection[T](DbConnection dedicatedConnection, Func2 func) at Hangfire.Server.BackgroundServerProcess.CreateServer(BackgroundServerContext context) at Hangfire.Server.BackgroundServerProcess.Execute(Guid executionId, BackgroundExecution execution, CancellationToken stoppingToken, CancellationToken stoppedToken, CancellationToken shutdownToken) at Hangfire.Server.BackgroundProcessingServer.RunServer(Guid executionId, Object state) at Hangfire.Processing.BackgroundExecution.Run(Action2 callback, Object state)

似乎我们正在最大化 SQL 连接池中的连接数。

我想以某种方式检测到这一点并清除池。我如何检测它?我可以为此使用作业过滤器吗?

【问题讨论】:

  • 您是否使用using 处理所有连接对象?如果你这样做,出现这个问题是非常不寻常的,除非你正在敲击数千个查询(然后你可能还有其他问题)
  • 是的,我们正在处理。这是在服务中运行的,我们仅在负载非常重的情况下才会看到这种情况。
  • 听上去还是很奇怪,你确定你的地方没有泄漏吗?也许您应该只增加池大小。但我会调查为什么有这么多并发查询正在运行,也许你可以实现一些缓存策略
  • “重载”是什么意思?我同意@Charlieface,大多数时候,池耗尽是代码问题的标志。如果您的所有堆栈跟踪都相同,我会说您正在尝试启动太多服务器(您应该只需要一个)

标签: c# hangfire sqlclient


【解决方案1】:

升级到最新版本的 Hangfire 似乎已经解决了这个问题。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 2013-01-07
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2011-04-01
    • 2012-09-25
    • 2011-04-23
    相关资源
    最近更新 更多