У меня проблемы с отладкой приложения ASP.NET MVP, которое использует Hangfire для обработки очередей.Когда я начинаю отладку в Visual Studio (базы данных развертываются удаленно в Azure), я получаю кучу DistributedLockTimeoutExceptions и RecurringJobScheduler: Ошибки отладки.Это происходит только во время отладки.Проблема не появляется, когда приложение развернуто и работает, или если я запускаю его без отладки через VS.
В результате возникает ошибка, и приложение снова и снова повторяет подключения в течение как минимум часа (обычно около 2-3 часов).После загрузки приложения весь процесс повторяется для каждого выполненного действия.
Я бы очень хотел отладить приложение, но со временем это практически невозможно, и оно часто вылетает.Проблема вроде выросла.В начале загрузка приложения длилась всего пару минут, и все становилось все хуже (в начале я даже не видел никаких ошибок, поскольку загрузка была вполне приемлемой).
Ошибка возникает несколько развремена, но все они в основном одинаковы.Часто встречающиеся ошибки:
Hangfire.Storage.DistributedLockTimeoutException: Timeout expired. The timeout elapsed prior to obtaining a distributed lock on the 'HangFire:locks:schedulepoller' resource.
at Hangfire.SqlServer.SqlServerDistributedLock.Acquire(IDbConnection connection, String resource, TimeSpan timeout)
at Hangfire.SqlServer.SqlServerConnection.AcquireLock(String resource, TimeSpan timeout)
at Hangfire.SqlServer.SqlServerConnection.AcquireDistributedLock(String resource, TimeSpan timeout)
at Hangfire.Server.DelayedJobScheduler.UseConnectionDistributedLock[T](JobStorage storage, Func`2 action)
at Hangfire.Server.DelayedJobScheduler.Execute(BackgroundProcessContext context)
at Hangfire.Server.AutomaticRetryProcess.Execute(BackgroundProcessContext context)
Hangfire.SqlServer.ExpirationManager:Debug: Background process 'Hangfire.SqlServer.ExpirationManager' started.
Hangfire.SqlServer.CountersAggregator:Debug: Background process 'Hangfire.SqlServer.CountersAggregator' started.
Hangfire.SqlServer.ExpirationManager:Debug: Removing outdated records from the 'AggregatedCounter' table...
Hangfire.SqlServer.CountersAggregator:Debug: Aggregating records in 'Counter' table...
Hangfire.SqlServer.ExpirationManager:Debug: Removing outdated records from the 'Hash' table...
Hangfire.Server.Worker:Debug: Background process 'Worker #ea15664b' started.
Hangfire.SqlServer.CountersAggregator:Debug: Aggregating records in 'Counter' table...
Hangfire.Server.Worker:Debug: Background process 'Worker #eb7f9473' started.
Hangfire.Server.DelayedJobScheduler:Debug: Error occurred during execution of 'DelayedJobScheduler' process. Execution will be retried (attempt #1) in 00:00:01 seconds.
Hangfire.Storage.DistributedLockTimeoutException: Timeout expired. The timeout elapsed prior to obtaining a distributed lock on the 'HangFire:locks:schedulepoller' resource.
at Hangfire.SqlServer.SqlServerDistributedLock.Acquire(IDbConnection connection, String resource, TimeSpan timeout)
at Hangfire.SqlServer.SqlServerConnection.AcquireLock(String resource, TimeSpan timeout)
at Hangfire.SqlServer.SqlServerConnection.AcquireDistributedLock(String resource, TimeSpan timeout)
at Hangfire.Server.DelayedJobScheduler.UseConnectionDistributedLock[T](JobStorage storage, Func`2 action)
at Hangfire.Server.DelayedJobScheduler.Execute(BackgroundProcessContext context)
at Hangfire.Server.AutomaticRetryProcess.Execute(BackgroundProcessContext context)
Hangfire.Server.DelayedJobScheduler:Information: Error occurred during execution of 'DelayedJobScheduler' process. Execution will be retried (attempt #2) in 00:00:03 seconds.
System.InvalidOperationException: 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.
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Hangfire.SqlServer.SqlServerStorage.CreateAndOpenConnection()
at Hangfire.SqlServer.SqlServerConnection.AcquireLock(String resource, TimeSpan timeout)
at Hangfire.SqlServer.SqlServerConnection.AcquireDistributedLock(String resource, TimeSpan timeout)
at Hangfire.Server.RecurringJobScheduler.UseConnectionDistributedLock(JobStorage storage, Action`1 action)
at Hangfire.Server.RecurringJobScheduler.Execute(BackgroundProcessContext context)
at Hangfire.Server.AutomaticRetryProcess.Execute(BackgroundProcessContext context)
Hangfire.Server.RecurringJobScheduler:Debug: Error occurred during execution of 'RecurringJobScheduler' process. Execution will be retried (attempt #1) in 00:00:01 seconds.
Я уже пытался повторно развернуть приложение, и это не сильно помогло.Я попытался просмотреть некоторые упоминания об аналогичных ошибках в Интернете, но они не предоставили много информации, и предоставленные решения не сработали для меня. Я проверил таблицу блокировок, но это не входит.
На HangFire также практически не выполняется никаких заданий, кроме 1 каждые 30 минут, но для этого не требуется много ресурсов.В противном случае проблем с обработкой заданий немного, слишком мало.
Любая помощь будет приветствоваться!