12

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

「MonitorHeld」列の「99」を誰かが説明できますか?

このコマンドの完全なリファレンスドキュメントへのリンクはありますか?

ありがとう、アレックス

4

2 に答える 2

22

MonitorHeldは、その特定のSyncBlkによって保持されているモニターの数を示します。

ロックで競合が発生するたびに、1人の所有者がsyncblkを保持します。ロックの各ウェイターは2を保持します。

99は、ロックを「所有」している1つのオブジェクトと、ロックを待機している49のオブジェクトがあることを意味します。

!syncblk私が見つけた最高の議論と詳細な説明は、TessFerrandezによるこれです。

于 2010-02-04T20:48:52.460 に答える
3

Reedが述べたことに加えて、SOSEX.dll拡張機能の!dlkコマンドを使用して、デッドロックをチェックすることもできます。

于 2010-02-04T20:50:52.810 に答える