Зависание приложения: интерпретировать вывод команд WinDbg - PullRequest
0 голосов
/ 24 октября 2018

My .NET приложение использует BlockingCollection для обработки данных, полученных от RabbitMQ.Иногда на производстве прекращается обработка сообщений.Я сделал dump, используя procdump util, и попытался проверить дамп, используя WinDbg.Команда !threads показывает мне один поток с LockCount=1.Команда ~*e!clrstack выдала мне этот вывод для другого потока:

Child SP       IP Call Site
0f3bf068 7760c8ac [GCFrame: 0f3bf068] 
0f3bf118 7760c8ac [HelperMethodFrame_1OBJ: 0f3bf118] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)
0f3bf1a4 70ac5fb7 System.Threading.Monitor.Wait(System.Object, Int32, Boolean)
0f3bf1b4 70ad76a7 System.Threading.SemaphoreSlim.WaitUntilCountOrTimeout(Int32, UInt32, System.Threading.CancellationToken)
0f3bf1d0 70ad75f0 System.Threading.SemaphoreSlim.Wait(Int32, System.Threading.CancellationToken)
0f3bf230 703dc110 System.Collections.Concurrent.BlockingCollection`1[[System.__Canon, mscorlib]].TryAddWithNoTimeValidation(System.__Canon, Int32, System.Threading.CancellationToken)

Я попытался найти больше информации о блокировках.!locks команда дала мне только это Scanned 40 critical sections.!SyncBlock показывает это:

Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
-----------------------------
Total           1364
CCW             1
RCW             1
ComClassFactory 0
Free            713

Что такое GCFrame?Что такое CCW и RCW?Я не могу найти его в документации.

Также есть ли способ найти нить, которой принадлежит блокировка?

...