2010-02-04 103 views
8

我正在查看由SOS的!SyncBlk命令生成的輸出的描述。WinDbg/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」?

有沒有人有一個鏈接到這個命令的完整參考文檔?

謝謝, 亞歷克斯

回答

17

的MonitorHeld是指有多少監視器是由特定SyncBlk舉行。

每次你在鎖上爭用時,你都會有1個擁有者持有syncblk。鎖上的每個服務員都可以容納2.

您的99表示您擁有一個對象「擁有」該鎖,以及49個對象正在鎖上等待。

我發現!syncblk的最佳討論和詳細解釋是this one by Tess Ferrandez

3

除了裏德提到的內容之外,還可以使用SOSEX.dll擴展的!dlk命令檢查是否存在死鎖。

+0

非常有趣,不知道這個擴展! – Alex 2010-02-04 20:58:55

+0

!dlk非常有用,但它沒有找到所有的死鎖。 – 2010-02-19 09:13:54

+0

看起來像sosex是過時的.NET 4,psscor4是我發現的唯一選項 – IgorK 2012-10-04 13:52:56