WinDbg/SOS: объяснение вывода !SyncBlk

Я ищу описание вывода, сгенерированного командой SOS !SyncBlk.

В частности, я не нашел полезного объяснения в столбце «MonitorHeld». В этом столбце показаны высокие значения в серии аварийных дампов.

Пример:

0:000> !SyncBlk
Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
   44 0000000005a5c228            1         1 000000000e7a6740  2304 273   000000019f858cd0 System.Object
   48 000000000579bae8            1         1 000000000e7a72e0  2370 275   000000015f999900 System.Object
   52 000000000579b9c8            1         1 0000000011bbd3b0  1e98 295   00000000ff89fe08 System.Object
   54 000000000579b938            1         1 000000000e7a38c0  1be4 249   000000013f8aa888 System.Object
  108 0000000005a5bfe8            1         1 000000000e79f300  224c 242   00000000ff8a5828 System.Object
  110 0000000005a5c078            1         1 000000000e79ca50  2290 262   000000015f9a8020 System.Object
  112 0000000005a5c108            1         1 0000000011bb70e0  1d38 236   000000015f99e408 System.Object
  114 000000000579b620            1         1 0000000011bb93c0  1884 304   00000001bf974a90 System.Object
  124 0000000005a44d48            1         1 000000000e7a6170  2300 272   000000019f853fe8 System.Object
  146 0000000005a44688           99         1 000000000588cbf0  13e0  38   000000017f71c4f8 System.Object
  155 0000000005a44f88            1         1 0000000011bba530  2274 301   000000019f82f120 System.Object
  157 0000000005a45018            1         1 0000000011bbf0c0  2034 290   000000015f952980 System.Object

Кто-нибудь может объяснить "99" в столбце "MonitorHeld"?

Есть ли у кого-нибудь ссылка на полную справочную документацию по этой команде?

Спасибо, Алекс


person Alex    schedule 04.02.2010    source источник


Ответы (2)


MonitorHeld относится к тому, сколько мониторов удерживается этим конкретным SyncBlk.

Каждый раз, когда у вас возникают споры о блокировке, у вас будет 1 владелец, удерживающий syncblk. Каждый официант на замке держит 2.

Ваш 99 означает, что у вас есть один объект, «владеющий» блокировкой, и 49 объектов, ожидающих блокировки.

Лучшее обсуждение и подробное объяснение !syncblk, которое я нашел, находится на этот Тесс Феррандес.

person Reed Copsey    schedule 04.02.2010

В дополнение к тому, что упоминал Рид, вы также можете использовать команду !dlk расширения SOSEX.dll для проверки взаимоблокировок.

person Otávio Décio    schedule 04.02.2010
comment
Очень интересно не знал об этом расширении! - person Alex; 04.02.2010
comment
!dlk очень полезен, но он не находит все взаимоблокировки. - person Brian Rasmussen; 19.02.2010
comment
похоже, что sosex устарел для .NET 4, psscor4 - единственный вариант, который я нашел - person IgorK; 04.10.2012
comment
расширение sosex не устарело для .net 4 - person Rohit Sharma; 16.02.2013
comment
Также имеется обновление для SOSEX, которое можно использовать с .NET 4.5 — stevestechspot.com/SOSEXUpdatendashReadyForNET45.aspx - person Dave Black; 28.02.2014