2010-02-04 18 views
8

Estoy buscando una descripción de la salida generada por el comando! SyncBlk de SOS.WinDbg/SOS: Explicación de! Salida SyncBlk

Particularmente no encontré ninguna explicación útil en la columna "MonitorHeld". Esta columna muestra valores altos en una serie de volcados de emergencia.

Ejemplo:

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 

Puede alguien explicar el "99" en la columna "MonitorHeld"?

¿Alguien tiene un enlace a una documentación de referencia completa de este comando?

Gracias, Alex

Respuesta

17

El MonitorHeld se refiere a cuántos monitores pertenecieran a la SyncBlk específica.

Cada vez que tenga una disputa en un bloqueo, tendrá 1 propietario retenido syncblk. Cada camarero en un candado tiene 2.

Tu 99 significa que tienes un objeto que "posee" el candado, y 49 objetos esperando en el candado.

La mejor discusión y explicación detallada de !syncblk que he encontrado es this one by Tess Ferrandez.

3

Además de lo que Reed mencionó, puede usar el comando! Dlk de la extensión SOSEX.dll para buscar también bloqueos.

+0

¡Muy interesante no sabía acerca de esta extensión! – Alex

+0

! Dlk es muy útil, pero no encuentra todos los puntos muertos. –

+0

parece que sosex está desactualizado para .NET 4, psscor4 es la única opción que he encontrado – IgorK