У нас есть многопоточная библиотека, подготовленная с NetStandard2.0, используя язык программирования C#. < /p>
Дополнительная информация (обновление ): эта библиотека потребляется несколькими процессами в одно и то же время. Например; У нас может быть 40 инструментов, и каждый инструмент будет выполнен в той же физической или виртуальной машине и использовал эту библиотеку. /p>
Описание проблемы: < /strong>
Я испытываю прерывистую проблему блокировки при выполнении следующего блока кода в моей библиотеке. В нормальных условиях выполнение заканчивается в одних и тех же миллисекундах, но иногда существует задержка (наконец -то 45 с) между двумя операторами логарифма. Я хочу понять, что может привести к этой задержке.
Код: Выделить всё
public class ToolCheckLayer
{
private async Task CheckAsync(CancellationToken cancellationToken)
{
Logger?.Info("KeepAlive is working...");
using (var messageListener = await _bus.CreateListenerAsync(cancellationToken)
.ConfigureAwait(false))
{
// Some operations
return true;
}
return false;
}
}
Вот соответствующий код, связанный с созданием прослушивателя шины:
Код: Выделить всё
public class MessageBus
{
private readonly ILogger _logger;
private readonly SemaphoreSlim _listenerSemaphore;
public class MessageBusListener : IDisposable
{
private readonly ILogger _logger;
private readonly bool _privileged;
private readonly BufferBlock _queue;
public MessageBusListener(ILogger logger, bool privileged,
Action disposeAction)
{
_logger = logger;
_priviledged = privileged;
_queue = new BufferBlock();
}
// Some Functions...
}
public MessageBus(ILogger logger, int maxConcurrentListeners)
{
_logger = logger;
_listenerSemaphore = new SemaphoreSlim(maxConcurrentListeners);
}
public async Task CreateListenerAsync(
CancellationToken cancellationToken)
{
_logger?.Debug("Creating listener...");
await _listenerSemaphore.WaitAsync(cancellationToken);
var listener = new MessageBusListener(_logger, privileged: false, () =>
{
_listenerSemaphore.Release();
});
// Operations
return listener;
}
}
Проблема не возникает постоянно; это происходит случайным образом через несколько недель или месяцев бесперебойной работы.
В период блокировки не наблюдалось никаких узких мест в процессоре, памяти или вводе-выводе.
Последние результаты ( Обновление-2)
Tool 1
10:20:16.4951|INFO|ToolCheckLayer [1]: KeepAlive is working...
--- Here: ~45 seconds blocking sometimes less... ----------->
10:21:00.0168|DEBUG|MessageBus [1]: Creating listener...
Tool 2
10:20:15.2180|INFO|ToolCheckLayer [1]: KeepAlive is working...
--- Here: ~45 seconds blocking sometimes less... ----------->
10:21:00.0171|DEBUG|MessageBus [1]: Creating listener...
Tool 3
2025-01-23 10:20:16.4638|INFO|ToolCheckLayer [1]: KeepAlive is working...
--- Here: ~45 seconds blocking sometimes less... ----------->
2025-01-23 10:21:00.0144|DEBUG|MessageBus [1]: Creating listener...
...
< /code>
Мы снова столкнулись с проблемой на 24 инструментах, но на этот раз продолжительность блокировки довольно длинная. В соответствии с временными метками журнала, CreateListenerEnerasync () для каждого инструмента блокируется до определенного времени. (10: 21: 00.01xx) тогда все блоки бесплатны. Данные не было получено для повышения подозрений.
Использование ЦП %3, память %40 и т. Д. < /p>
Большое спасибо всем, кто внес свой вклад.>
Подробнее здесь: https://stackoverflow.com/questions/793 ... statements