El worker role de Azure lanza un FileNotFoundException al cargar
Actualmente estoy trabajando en un player con tecnología de smooth streaming basado en Silverlight y tenemos algunos servicios que el player consume que queremos publicar en Azure. El caso es que me he puesto a hacer las primeras pruebas en Azure en mi maquina local, pero cada vez que ejecuto el projecto el Azure Simulation Environment este me lanza un FileLoadException.
[runtime] Role entrypoint could not be created: System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Silverlight.MediaPlayer.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a10dc7bdece43c5c' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047) File name: 'Microsoft.Silverlight.MediaPlayer.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a10dc7bdece43c5c' ---> System.IO.FileLoadException: Could not load file or assembly 'file:///C:\Plain\Microsoft.SmoothPlayer\Source\Azure\Microsoft.Silverlight.MediaPlayer.Online\bin\Debug\Microsoft.Silverlight.MediaPlayer.Online.csx\roles\Microsoft.Silverlight.MediaPlayer.Web\approot\bin\Microsoft.Silverlight.MediaPlayer.Web.dll' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047) File name: 'file:///C:\Plain\Microsoft.SmoothPlayer\Source\Azure\Microsoft.Silverlight.MediaPlayer.Online\bin\Debug\Microsoft.Silverlight.MediaPlayer.Online.csx\roles\Microsoft.Silverlight.MediaPlayer.Web\approot\bin\Microsoft.Silverlight.MediaPlayer.Web.dll' WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. Note: There is some performance penalty associated with assembly bind failure logging. To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog]. at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) at System.Reflection.Assembly.LoadFrom(String assemblyFile) at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CreateRoleEntryPoint(RoleType roleTypeEnum) at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum)
Llegado a este punto hice una doble comprobación de que realmente el fichero estaba ahi y se tenian permisos para leer el fichero. Active la salida del Fusion Log para ver los errores de carga de los ensamblados pero no me aparecía nada. Así que decidí utilizar el WinDBG para sacar un poco más de información.
Me atache al proceso host de web de Azure WaWebHost.exe (Microsoft Windows Azure Web Host), cargue todos los símbolos y SOS. El primer comando que ejecute fue !threads y encontré esto:
0:000> !threads
ThreadCount: 6
UnstartedThread: 0
BackgroundThread: 5
PendingThread: 0
DeadThread: 0
Hosted Runtime: no
PreEmptive Lock
ID OSID ThreadOBJ State GC GC Alloc Context Domain Count APT Exception
XXXX 1 1ba0 000000000014c4a0 2008220 Enabled 00000000053a1c10:00000000053a1fd0 0000000002f182a0 1 Ukn System.IO.PathTooLongException (0000000005305a80)
XXXX 2 294 00000000000e46d0 b220 Enabled 00000000053d09f8:00000000053d1fd0 0000000002f17990 0 MTA (Finalizer)
XXXX 3 13b0 00000000022f9350 a802220 Enabled 0000000000000000:0000000000000000 0000000002f17990 0 MTA (Threadpool Completion Port)
XXXX 4 1a80 0000000002fbc080 80a220 Enabled 0000000000000000:0000000000000000 0000000002f17990 0 MTA (Threadpool Completion Port)
XXXX 5 1ae0 0000000002fbe650 1220 Enabled 0000000000000000:0000000000000000 0000000002f17990 0 Ukn
0 6 7e4 0000000002fe22c0 1020 Enabled 00000000053c69b0:00000000053c7fd0 0000000002f182a0 0 Ukn System.IO.FileLoadException (00000000053a7ca8)
Como se puede observer hay dos dominios de aplicación cargados en el proceso, el thread 1 y 6 están ejecutando código de ese dominio de aplicación y el thread 1 muestra la excepción que estamos depurando FileLoadException pero el thread 6 muestra un System.IO.PathTooLongException.
0:001> !pe 0000000005305a80 Exception object: 0000000005305a80 Exception type: System.IO.PathTooLongException Message: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. InnerException: <none> StackTrace (generated): SP IP Function 00000000031BD360 000007FEED2D5A8F mscorlib_ni!System.IO.Path.NormalizePathFast(System.String, Boolean)+0xd0f 00000000031BD420 000007FEED239CA6 mscorlib_ni!System.IO.File.Exists(System.String)+0x96 StackTraceString: <none> HResult: 800700ce The current thread is unmanaged
Así que el único problema es que el path del fichero es demasiado largo y el sistema no puede cargarlo.
Espero que os sea de ayuda!
Luis Guerrero.
Detectando problemas de memoria con Silverlight
Hola a todos!
Hoy vamos a hablar sobre un memory leak encontrado en Silverlight 4 y reportado en el foro de silverilght.net por el usuario tsheflin. Como sabrás Silverlight está basado en tecnología .net lo que significa que puedes escribir tus aplicaciones en C# o en Visual Basic y tienes todas las cosas buenas de .net como gestión automática de memoria, recolección de elementos no utilizados y seguridad de tipos
Pero algunas veces algo sale más y aun teniendo la gestión automática de memoria de .net nos podemos encontrar con problemas, es por eso que hoy vamos a ver cómo podemos identificar estos problemas con WinDBG y sos para Silverlight.
Voy a usar como ejemplo el codigo subido por el usuario del foro de Silverlight.net. Puedes descargarlo desde aquí.
Lo primero de todo necesitamos ejecutar nuestra aplicación en modo release. Esto es importante porque hay pequeñas diferencias entre el modo debug y el release. Una vez que tenemos la aplicación ejecutándose es tiempo de WinDGB.
Si tu navegador es Windows Internet Explorer 8 y estás ejecutándolo sobre Windows 7 o Vista, sabrás que IE ejecuta cada tab en un proceso separado y por eso primero tienes que identificar cual es el proceso de IE que está ejecutando el código, en mi caso es el proceso 7958.
Con WinDBG abierto (puedes descargarlo de aquí) tienes que ir a File -> Attach to process (F6), y selecciona la id de tu proceso (en mi maquina es 7958), inmediatamente aparecerá en la ventana de salida toda la información básica de depuración. Teniendo en cuenta que nuestra aplicación es una aplicación administrada y WinDBG está diseñado para depurar aplicaciones nativas necesitamos una extensión del depurador para trabajar con aplicaciones administradas. Lo que necesitamos es SOS (Son of Strike) que está localizado en C:\Program Files (x86)\Microsoft Silverlight\4.0.50401.0\sos.dll. Para cada version de silverligh hay una versión de SOS, así que depende de la versión de Silveright que estés depurando tendrás que usar una u otra.
Para cargar SOS escribimos
.load C:\Program Files (x86)\Microsoft Silverlight\4.0.50401.0\sos.dll
Lo siguiente que necesitamos encontrar es una direccion valida del tipo que estamos buscando SilverlightVisualTreeRemovalFail.SilverlightControl1 y para eso tenemos que usar el comando !dumpheap para volcar todos los tipos filtrados por este tipo.
!dumpheap -type SilverlightVisualTreeRemovalFail.SilverlightControl1 0:005> !dumpheap -type SilverlightVisualTreeRemovalFail.SilverlightControl1 Address MT Size 087aad6c 04a45230 92 087ab460 04a45230 92 087ab6f0 04a45230 92 087ac01c 04a45230 92 087ac710 04a45230 92 087ace04 04a45230 92 087ad4f8 04a45230 92 087adbec 04a45230 92 087ae2e0 04a45230 92 087ae9d4 04a45230 92 087af0c8 04a45230 92 087af7bc 04a45230 92 087afeb0 04a45230 92 087b05a4 04a45230 92 087b0c98 04a45230 92 087b138c 04a45230 92 087b1a80 04a45230 92 087b2174 04a45230 92 087b2868 04a45230 92 087b2f5c 04a45230 92 087b3650 04a45230 92 087b3d44 04a45230 92 087b4438 04a45230 92 087b4b2c 04a45230 92 087b5220 04a45230 92 087b5914 04a45230 92 087b6008 04a45230 92 087b66fc 04a45230 92 087b6df0 04a45230 92 087b74e4 04a45230 92 087b7bd8 04a45230 92 087b82cc 04a45230 92 087b89c0 04a45230 92 087b90b4 04a45230 92 087b97a8 04a45230 92 087b9e9c 04a45230 92 087ba590 04a45230 92 087bac84 04a45230 92 087bb378 04a45230 92 087bba6c 04a45230 92 087bc160 04a45230 92 087bc854 04a45230 92 087bcf48 04a45230 92 087bd63c 04a45230 92 087bdd30 04a45230 92 087be424 04a45230 92 087beb18 04a45230 92 087bf20c 04a45230 92 087bf900 04a45230 92 087bfff4 04a45230 92
En la ventana de salida encontramos direcciones del tipo que hemos solicitado, seleccionamos una 087b1a80 y buscamos que objetos están referenciando este objeto (esto es lo que está causando que el objeto no sea recolectado) escribiendo esto:
!gcroot 087b1a80 0:005> !gcroot 087b1a80 Note: Roots found on stacks may be false positives. Run "!help gcroot" for more info. Scan Thread 5 OSTHread 10e8 Scan Thread 22 OSTHread 1f8 Scan Thread 23 OSTHread 1588 DOMAIN(07134BE0):HANDLE(Pinned):4a912f8:Root: 09784260(System.Object[])-> 08796c78(System.Collections.Generic.Dictionary`2[[System.IntPtr, mscorlib],[System.Object, mscorlib]])-> 09788260(System.Collections.Generic.Dictionary`2+Entry[[System.IntPtr, mscorlib],[System.Object, mscorlib]][])-> 087b1e90(System.Windows.Controls.ControlTemplate)-> 087b1a80(SilverlightVisualTreeRemovalFail.SilverlightControl1)
Encontramos que el objeto (087b1a80) está referenciado por otro objeto y en lo alto de la lista podemos encontrar cual es el objeto que lo está referenciando.
Ahora que hemos identificado que el objeto está referenciado por un GCHandle pineado el recolector siempre encontrará un camino hasta este objeto haciendo que nunca sea recolectado. Como el código que controla esta funcionalidad es de Microsoft no podemos hacer nada al respecto, pero en caso de que sea nuestro lo que podemos hacer es simplemente eliminar las referencias para que el objeto sea recolectado.
Además podemos volcar todos los tipos que hay en el heap y abrirlo con el CLRProfiler usando !traverseheap.
Saludos.
Luis Guerrero.
Trabajando con Heap Corruptions in .NET
Una de las mejores características de .NET Framework es la administración automática de la memoria, eso significa que no tenemos que estar pendientes de memory leaks, corrupciones y demás problemas. Pero en este artículo encontraremos que esto no es así todas las veces. Os quiero mostrar un bug que he encontrado en una aplicación .NET 4.
Como ya sabreis el clr tiene una heap administrado que contiene todos los objetos que se han ido creando en todo el código ejecutado, y es precisamente en ese managed heap donde el recolector de basura trabaja para ordenarlo y limpiarlo. Vamos a utilizar algunos comandos de WinDBG para ver el estado del heap
Durante la ejecución de mi aplicación aleatoriamente la aplicación me lanza un System.ExecutionEngineException. Como se puede imaginar esta excepción es fatal y no hay oportunidad para cachearla así que mi aplicación se cierra cuando se encuentra con una excepción como esta.
0:281> !threads
ThreadCount: 325
UnstartedThread: 0
BackgroundThread: 268
PendingThread: 0
DeadThread: 56
Hosted Runtime: no
PreEmptive Lock
ID OSID ThreadOBJ State GC GC Alloc Context Domain Count APT Exception
0 1 f74 00000000001b47b0 6020 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 STA
2 2 3ddc 00000000001baaf0 b220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Finalizer)
5 3 3f44 0000000000fb8ee0 100a220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
7 4 2acc 000000001c75c120 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
8 5 f2c 000000001c75c830 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
9 6 1bf4 000000001c75cf40 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
10 7 1e10 000000001c75ea80 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 9 000000001c7f8dd0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
12 b 1a9c 000000001c814830 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
13 d 1f50 000000001df31e80 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
14 a 21b4 000000001c7fdd10 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
15 f 2d54 000000001df31160 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
18 10 3edc 000000001df4ef50 b220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 1 MTA
19 12 3ffc 000000001df60bd0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
20 e 958 000000001df612e0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
21 c 2be0 000000001df62100 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
22 14 1920 000000001df62f20 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
23 11 39f0 000000001df619f0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
24 15 2e00 000000001df63630 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 16 000000001df63d40 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
25 17 734 000000001df64450 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
26 18 2c78 000000001df64b60 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 19 000000001df65270 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 Ukn (Threadpool Worker)
27 1a 2330 000000001df62810 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
28 1c 20f4 000000001df667a0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 13 000000001df66090 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 1e 000000001df675c0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
29 1b 360c 000000001df66eb0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
30 1d 1f04 000000001df67cd0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
31 8 ce0 000000001df65980 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
32 20 3a94 000000001df34070 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
33 21 2ce8 000000001df34780 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
34 22 3dd4 000000001df355a0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
35 24 31c8 000000001df363c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
36 26 15d0 000000001df371e0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
37 23 3aec 000000001df35cb0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
38 27 33b8 000000001df378f0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
39 1f afc 000000001df34e90 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
40 28 9b8 000000001df683e0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
41 29 1ba8 000000001c81e7c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 2a 000000001c81f5e0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
42 25 3cbc 000000001c81eed0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
43 2c 20fc 000000001df36ad0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
44 2d 290c 000000001c8573d0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (GC) (Threadpool Worker) System.ExecutionEngineException (0000000002871228)
45 2b 2f58 000000001c81fcf0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
46 2f 33b4 000000001c8581f0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 2e 000000001c858900 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 Ukn (Threadpool Worker)
47 31 1020 000000001c859010 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 32 000000001c859720 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 Ukn (Threadpool Worker)
48 33 ad8 000000001c859e30 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
49 34 3230 000000001c85a540 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
50 35 1a74 000000001c85ac50 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
51 36 3650 000000001c8064f0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
52 37 2890 000000001c806c00 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 38 000000001c807310 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
53 39 1c20 000000001c807a20 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 3a 000000001dfe2860 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
54 3b 1694 000000001dfe2f70 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
55 3d 37b8 000000001dfe3d90 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 30 000000001dfe44a0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 3e 000000001dfe4bb0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
56 3f 18b8 000000001dfe52c0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
57 40 11b0 000000001dfe59d0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
58 41 1ee0 000000001dfe60e0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 42 000000001c857ae0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
59 43 27e8 000000001e0c80b0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
60 44 a84 000000001e0c87c0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
61 46 1ba4 000000001e0c95e0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
62 48 2160 000000001e0ca400 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
63 4a 2bdc 000000001e0cb220 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
64 47 12d0 000000001e0c9cf0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
65 49 be4 000000001e0cab10 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
66 3c 186c 000000001e0cb930 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 4b 000000001dfe3680 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
67 45 3498 000000001e0c8ed0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 4d 000000001e19b9a0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
68 4e 1550 000000001e19c0b0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
69 50 313c 000000001e19ced0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 51 000000001e19d5e0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 4f 000000001e19c7c0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
70 52 20bc 000000001e19dcf0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
71 4c 33fc 000000001e19b290 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
72 54 2380 000000001e19eb10 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
73 53 a04 000000001e19e400 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
74 56 2028 000000001e22f050 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
75 58 3df0 000000001e22fe70 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 57 000000001e230580 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
76 55 1d08 000000001e22f760 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 5a 000000001e230c90 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
77 5c 373c 000000001e231ab0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 59 000000001e22e940 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 Ukn (Threadpool Worker)
78 5d e90 000000001e2321c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 5e 000000001e2ba200 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
79 5f 1358 000000001e2ba910 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 5b 000000001e2bb020 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
80 60 1a98 000000001e2bb730 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
81 61 26f4 000000001e2bbe40 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
82 62 abc 000000001e2bc550 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
83 63 19d4 000000001e2bcc60 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
84 64 1220 000000001e2bd370 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
85 65 1e6c 000000001e2bda80 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
86 66 162c 000000001e2313a0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 67 000000001e2de370 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
87 68 3040 000000001e2dea80 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
88 6a 139c 000000001e2df8a0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
89 6b 39f4 000000001e2dffb0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
90 6c 375c 000000001e2e06c0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
91 6d 1548 000000001e2e0dd0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
92 6e 2920 000000001e2e14e0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 6f 000000001e2e1bf0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
93 70 376c 000000001e2e6370 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 71 000000001e2e6a80 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
94 72 14ec 000000001e2e7190 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 75 000000001e2e78a0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
95 73 1930 000000001e2e86c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
96 76 17dc 000000001e2e8dd0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
97 74 c88 000000001e2e7fb0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
98 77 d0c 000000001e2e94e0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 78 000000001e2e9bf0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 7a 0000000024ddd4c0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
99 7b 2878 0000000024dddbd0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
100 79 1278 0000000024dde2e0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
101 7c 2358 0000000024ddcdb0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 7d 0000000024dde9f0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
102 7e 28a8 0000000024ddf100 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
103 7f 1778 0000000024ddf810 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
104 80 2990 0000000024ddff20 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
105 81 1864 0000000024de0630 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
106 82 3dc4 0000000024de4db0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
107 83 371c 0000000024de54c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
108 84 3e80 0000000024de5bd0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
109 85 3634 0000000024de62e0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
110 86 3908 0000000024de69f0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
111 87 2998 0000000024de7100 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
112 88 200c 0000000024de7810 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
113 89 3370 0000000024de7f20 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
114 8a 33dc 0000000024de8630 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
115 8b 1b98 0000000024df2a90 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
116 8c 1378 0000000024df31a0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
117 8d 3e0c 0000000024df38b0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 8e 0000000024df3fc0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
118 8f 3444 0000000024df46d0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
119 90 3044 0000000024df4de0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 91 0000000024df54f0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
120 92 389c 0000000024df5c00 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
121 93 3938 0000000024df6310 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 95 0000000024e8d5b0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
122 96 18e0 0000000024e8dcc0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
123 97 3954 0000000024e8cea0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
124 98 329c 0000000024e8e3d0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
125 94 2cf0 0000000024e8eae0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
126 9a 3d18 0000000024e8f900 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
127 9b a80 0000000024e8f1f0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
128 9c 13ac 0000000024e90720 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
129 99 2f84 0000000024e90010 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 9e 000000001e0f9180 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 9f 000000001e0f8a70 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
130 a0 2a20 000000001e0f9fa0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 9d 000000001e0f9890 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
131 a3 2544 000000001e0fb4d0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
132 a1 2910 000000001e0fa6b0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
133 a4 a9c 000000001e0fadc0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
134 a5 1880 000000001e0fbbe0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
135 a6 2d28 0000000024f038f0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
136 a7 12d4 0000000024f04710 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX a8 0000000024f04e20 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
137 a9 11c8 0000000024f05530 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
138 ab 2d4c 0000000024f06350 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
139 aa 1bf8 0000000024f05c40 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
140 a2 244 0000000024f04000 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
141 ac 2688 0000000024f06a60 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
142 ad 27e0 0000000024f07170 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
143 ae 315c 000000001e0fc2f0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX af 000000002501d670 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
144 b0 7bc 000000002501dd80 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
145 b3 1294 000000002501f2b0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
146 b4 3e94 000000002501f9c0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
147 b5 fc8 00000000250200d0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
148 b6 d48 00000000250207e0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
149 b7 1f84 0000000025020ef0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
150 b8 3138 0000000025021600 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
151 b9 3214 0000000025021d10 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
152 ba 175c 0000000025022420 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
153 bb 3a24 0000000025022b30 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
154 bc 340c 0000000025023240 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX bd 0000000025023950 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
155 be 27b4 0000000025024060 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
156 bf 2c54 0000000025024770 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
157 c0 3698 0000000025024e80 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
158 c1 20f0 0000000025064a30 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
159 c2 1dc 0000000025065140 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
160 c3 2378 0000000025065850 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
161 c4 1444 0000000025065f60 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX c5 0000000025066670 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX c6 0000000025066d80 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
162 c7 b0c 0000000025067490 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
163 c8 30f4 0000000025067ba0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
164 c9 3d60 00000000250682b0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
165 ca 108c 00000000250689c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
166 cb 37b0 00000000250690d0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX cc 00000000250697e0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
167 b1 dc0 0000000025069ef0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
168 b2 3ed4 000000002506a600 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX cd 000000002506ad10 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
169 ce c38 000000002506b420 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
170 cf 24cc 000000002506bb30 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX d0 000000002506c240 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
171 d1 1d80 000000002501e490 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
172 d2 1edc 000000002501eba0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
173 d3 304c 000000002513cbf0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
174 d4 3b08 000000002513d300 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
175 d7 3adc 000000002513e830 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX d8 000000002513ef40 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
177 69 2178 000000002513da10 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
178 d6 3b40 000000002513e120 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
179 d9 f28 000000002513fd60 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
180 da 382c 0000000025140470 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX db 0000000025140b80 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
181 dc b88 0000000025141290 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
182 dd 22ac 00000000251419a0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
183 df 1aac 00000000251427c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
184 e0 353c 0000000025142ed0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX d5 000000002513f650 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
185 de 319c 00000000251420b0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX e1 00000000251435e0 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
186 e2 3678 0000000025143cf0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
187 e3 13fc 0000000025144400 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
188 e4 3038 000000001e2df190 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
189 e5 3cc0 0000000024e5ae20 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
190 e6 3384 0000000024e5b530 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
191 e7 301c 0000000024e5bc40 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
192 e8 3448 0000000024e5c350 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
193 e9 2bcc 0000000024e5ca60 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX ea 0000000024e5d170 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX eb 0000000024e5d880 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX ec 0000000024e5df90 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
194 ed 1d04 0000000024e5e6a0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
195 ee c54 000000002523fed0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
196 ef 2220 00000000252405e0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
197 f0 2b60 0000000025240cf0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
198 f1 2d88 0000000025241400 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
199 f2 3ee8 0000000025241b10 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
200 f3 3f2c 0000000025242220 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
201 f4 1240 0000000025242930 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
202 f6 23dc 0000000025243750 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
203 f7 a74 0000000025243040 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
204 f8 3f40 0000000025243e60 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
205 f9 2f94 0000000025244c80 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
206 fa fa4 0000000025245390 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
207 fb 2c7c 0000000025245aa0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
208 f5 2a30 0000000025244570 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
209 fe 102c 0000000025246fd0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 100 0000000025384550 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
210 fd c28 00000000252461b0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
211 ff 233c 0000000025384c60 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
212 101 3c34 00000000252476e0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 102 0000000025385a80 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
213 104 1ad4 00000000253868a0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
214 fc 2ef0 0000000025385370 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
215 103 16bc 0000000025386190 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
216 105 990 0000000025386fb0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
218 107 3b38 0000000025387dd0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
219 108 974 00000000253884e0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
220 109 10e4 0000000025388bf0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
221 10a 1280 0000000025389300 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
222 10b 1494 00000000253876c0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
223 106 25ac 0000000025389a10 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
224 10e 2b94 000000002538af40 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
225 10c 3218 000000002538a830 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
226 110 2a5c 000000002538bd60 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
227 10d 2d90 000000002538b650 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
228 10f e10 00000000252468c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
229 112 21bc 0000000025464400 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
230 113 13e4 0000000025464b10 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
231 114 2d84 0000000025465220 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
232 115 3e98 0000000025465930 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
233 116 115c 0000000025466040 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
234 117 1228 0000000025466750 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 118 0000000025466e60 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
235 119 3054 0000000025467570 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
236 11a 10f4 0000000025467c80 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
237 11b 18b4 0000000025468390 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
238 11c 3a1c 0000000025468aa0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
239 11d 187c 00000000254691b0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
240 11e 342c 00000000254698c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
241 11f 12f4 0000000025469fd0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
242 120 2a04 000000002546a6e0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
243 121 36dc 000000002546adf0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
244 122 ffc 000000002546b500 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
245 123 c70 000000002546bc10 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
246 124 39f8 000000002546c400 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
247 125 34c4 000000002546cb10 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 126 000000002546d220 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
248 127 ae0 000000002546d930 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
249 129 17fc 000000002546ee60 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
250 12b 2288 000000002546f570 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
251 111 2fa0 000000002546e750 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 12a 000000002546fc80 1019820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
252 128 3160 0000000025470aa0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
253 12c 1fd8 000000002546e040 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
256 12d 13bc 0000000025472df0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
258 12e fc0 00000000254718c0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
259 12f 2d34 0000000025471fd0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
260 130 366c 00000000254726e0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
261 131 af0 00000000254711b0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
262 132 2bbc 0000000025470390 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
263 133 ae8 0000000025473500 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
264 134 37b4 0000000025473c10 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
265 135 1e54 000000002538a120 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
266 136 3fa0 0000000033dbb290 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
267 137 2698 0000000033dbb9a0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
268 138 ec0 0000000033dbc0b0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
269 139 d30 0000000033dbc7c0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
270 13a cc8 0000000033dbced0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
271 13b 29f4 0000000033dbd5e0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
272 13c 2c74 0000000033dbdcf0 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
273 13d 3150 0000000033dbe400 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
274 13e 27c4 0000000033dbeb10 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
275 13f 1ee8 0000000033dbf220 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
276 140 1dec 0000000033dbf930 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
277 141 3398 0000000033dc0040 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
278 14a 274c 0000000033e073f0 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
279 14b 1d50 0000000033e08210 3009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
280 149 1258 0000000033e07b00 1009220 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 MTA (Threadpool Worker)
XXXX 148 0000000033e06ce0 19820 Enabled 0000000000000000:0000000000000000 00000000001a85b0 0 Ukn
Como vemos en esta salida de WinDBG tenemos varios thread y en el thread 44 hay una excepción (GC) (Threadpool Worker) System.ExecutionEngineException (0000000002871228) y esta dirección es la dirección de memoria donde es el System.ExecutionEngineException. Empecemos la investigación desde ahí.
0:281> !pe 0000000002871228 Exception object: 0000000002871228 Exception type: System.ExecutionEngineException Message: <none> InnerException: <none> StackTrace (generated): <none> StackTraceString: <none> HResult: 80131506 The current thread is unmanaged
Ahora como siempre examinemos las pilas nativas y administrada.
0:044> !clrstack OS Thread Id: 0x290c (44) Child SP IP Call Site 000000002191d9b8 000007fef3fecca3 [HelperMethodFrame: 000000002191d9b8] 000000002191dc30 000007fef2f394b7 System.Text.StringBuilder.ToString() 000000002191dc80 000007feed584193 System.Data.Query.PlanCompiler.CTreeGenerator.ResolveVar(System.Data.Query.InternalTrees.Var) 000000002191dd40 000007feed5845fe System.Data.Query.PlanCompiler.CTreeGenerator.CreateProject(RelOpInfo, System.Collections.Generic.IEnumerable`1<System.Data.Query.InternalTrees.Var>) 000000002191de10 000007feed587e49 System.Data.Query.PlanCompiler.CTreeGenerator.Visit(System.Data.Query.InternalTrees.PhysicalProjectOp, System.Data.Query.InternalTrees.Node) 000000002191deb0 000007feed58582c System.Data.Query.PlanCompiler.CTreeGenerator..ctor(System.Data.Query.InternalTrees.Command, System.Data.Query.InternalTrees.Node) 000000002191df10 000007feed5725f1 System.Data.Query.PlanCompiler.ProviderCommandInfoUtils.Create(System.Data.Query.InternalTrees.Command, System.Data.Query.InternalTrees.Node, System.Collections.Generic.List`1<System.Data.Query.PlanCompiler.ProviderCommandInfo>) 000000002191df60 000007feed536485 System.Data.Query.PlanCompiler.CodeGen.Process(System.Collections.Generic.List`1<System.Data.Query.PlanCompiler.ProviderCommandInfo> ByRef, System.Data.Query.InternalTrees.ColumnMap ByRef, Int32 ByRef) 000000002191dfe0 000007feed4b4d90 System.Data.Query.PlanCompiler.PlanCompiler.Compile(System.Collections.Generic.List`1<System.Data.Query.PlanCompiler.ProviderCommandInfo> ByRef, System.Data.Query.InternalTrees.ColumnMap ByRef, Int32 ByRef, System.Data.Common.Utils.Set`1<System.Data.Metadata.Edm.EntitySet> ByRef) 000000002191e0d0 000007feed54418e System.Data.EntityClient.EntityCommandDefinition..ctor(System.Data.Common.DbProviderFactory, System.Data.Common.CommandTrees.DbCommandTree) 000000002191e270 000007feed62aae4 System.Data.EntityClient.EntityProviderServices.CreateDbCommandDefinition(System.Data.Common.DbProviderManifest, System.Data.Common.CommandTrees.DbCommandTree) 000000002191e2b0 000007feed5cf34d System.Data.Objects.Internal.ObjectQueryExecutionPlan.Prepare(System.Data.Objects.ObjectContext, System.Data.Common.CommandTrees.DbQueryCommandTree, System.Type, System.Data.Objects.MergeOption, System.Data.Objects.Span, System.Collections.ObjectModel.ReadOnlyCollection`1<System.Collections.Generic.KeyValuePair`2<System.Data.Objects.ObjectParameter,System.Data.Objects.ELinq.QueryParameterExpression>>) 000000002191e3b0 000007feed5fec9a System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(System.Nullable`1<System.Data.Objects.MergeOption>) 000000002191e4b0 000007feed610a65 System.Data.Objects.ObjectQuery`1[[System.__Canon, mscorlib]].GetResults(System.Nullable`1<System.Data.Objects.MergeOption>) 000000002191e530 000007feed6117cf System.Data.Objects.ObjectQuery`1[[System.__Canon, mscorlib]].System.Collections.Generic.IEnumerable<T>.GetEnumerator() 000000002191e580 000007feef066e79 System.Linq.Enumerable.First[[System.__Canon, mscorlib]](System.Collections.Generic.IEnumerable`1<System.__Canon>) 000000002191e5e0 000007feef081daf System.Linq.Queryable.First[[System.__Canon, mscorlib]](System.Linq.IQueryable`1<System.__Canon>) 000000002191e640 000007ff00416efa ServerDetection.Data.DataAccess.UpdateSever(ServerDetection.Server) 000000002191e940 000007ff004133b6 ServerDetection.StreamRulesEngine.ExploreServer(ServerDetection.Server) 000000002191eb50 000007ff00412f2c ServerDetection.StreamRulesEngine.<CreateTask>b__15(System.Object) 000000002191eb90 000007fef36796bb System.Threading.Tasks.Task.Execute() 000000002191ebf0 000007fef2f60d3c System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 000000002191ec50 000007fef3679455 System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef) 000000002191ecd0 000007fef367d9d0 System.Threading.Tasks.Task.ExecuteEntry(Boolean) 000000002191ed10 000007fef2f96be8 System.Threading.ThreadPoolWorkQueue.Dispatch() 000000002191eda0 000007fef2f96a85 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 000000002191f3f0 000007fef3e621b4 [DebuggerU2MCatchHandlerFrame: 000000002191f3f0]
0:044> kb 2000 RetAddr : Args to Child : Call Site 000007fe`f3feaf0a : 00000000`00000001 00000000`00000000 000007fe`00000002 000007fe`00000001 : clr!WKS::gc_heap::plan_phase+0x454 000007fe`f3feb6a5 : 000000d4`19ef3257 00000000`2191d629 00000000`00000001 00000000`00000001 : clr!WKS::gc_heap::gc1+0xbb 000007fe`f3feb35e : 00000000`00193900 000007fe`00000000 00000000`00000000 00000000`00000000 : clr!WKS::gc_heap::garbage_collect+0x276 000007fe`f3fe9c18 : 00000000`1c857440 00000000`00000088 000007fe`f3e30000 00000000`09350d00 : clr!WKS::GCHeap::GarbageCollectGeneration+0x14e 000007fe`f3fe929e : 00000000`000000a8 000007fe`f46c3700 00000000`2191d800 00000000`1c857440 : clr!WKS::gc_heap::try_allocate_more_space+0x25f 000007fe`f3ee4a95 : 00000000`00000088 00000000`00193900 00000000`1c857440 00000000`2191dca0 : clr!WKS::GCHeap::Alloc+0x7e 000007fe`f2f394b7 : 00000000`08000001 00000000`09351c00 00000000`030d39f0 00000000`0934f478 : clr!FramedAllocateString+0xb19 000007fe`ed584193 : 00000000`09350e88 00000000`09350d00 00000000`0300b1a8 00000000`09350e88 : mscorlib_ni+0x3694b7 000007fe`ed5845fe : 00000000`09350e08 00000000`093405d0 00000000`000000fa 00000000`00000000 : System_Data_Entity_ni+0x854193 000007fe`ed587e49 : 00000000`0934f478 00000000`09350ce8 00000000`00000000 000007fe`f3e98733 : System_Data_Entity_ni+0x8545fe 000007fe`ed58582c : 00000000`0934f478 00000000`0934bff0 00000000`093382d8 000007fe`ed5734c8 : System_Data_Entity_ni+0x857e49 000007fe`ed5725f1 : 00000000`2191def0 000007fe`f3e701ff 00000000`00000000 00000000`2191e1c8 : System_Data_Entity_ni+0x85582c 000007fe`ed536485 : 00000000`09334420 000007fe`ed3ed8b9 00000000`0934f450 00000000`2191e050 : System_Data_Entity_ni+0x8425f1 000007fe`ed4b4d90 : 00000000`00000000 00000000`00000000 00000000`02de9628 00000000`1288f490 : System_Data_Entity_ni+0x806485 000007fe`ed54418e : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : System_Data_Entity_ni+0x784d90 000007fe`ed62aae4 : 00000000`093341a0 00000000`062e3608 00000000`09333ef8 00000000`09333ef8 : System_Data_Entity_ni+0x81418e 000007fe`ed5cf34d : 00000000`09333f28 000007fe`ed3f0a59 00000000`04f1db88 000007fe`f2f46f83 : System_Data_Entity_ni+0x8faae4 000007fe`ed5fec9a : 00000000`062e3608 000007ff`003d27e8 00000000`02db2aa0 0000635b`00000000 : System_Data_Entity_ni+0x89f34d 000007fe`ed610a65 : 00000000`04f1db88 00000000`00000000 000007ff`002ae568 00000000`2191e0b8 : System_Data_Entity_ni+0x8cec9a 000007fe`ed6117cf : 00000000`04f1dbe8 000007ff`00489730 000007fe`eeefa86f 00000000`00000000 : System_Data_Entity_ni+0x8e0a65 000007fe`ef066e79 : 00000000`062e7bc8 00000000`090f7a68 00000000`090f7a68 000007fe`ed5ff21f : System_Data_Entity_ni+0x8e17cf 000007fe`ef081daf : 000007ff`00489730 000007ff`00489430 00000000`09124478 00000000`08ee3668 : System_Core_ni+0x456e79 000007ff`00416efa : 000007ff`00488e40 00000000`00000000 00000000`08ed3048 00000000`12871030 : System_Core_ni+0x471daf 000007ff`004133b6 : 00000000`02dc41e8 00000000`0603a228 00000000`033d1008 000007fe`f383ea3c : 0x7ff`00416efa 000007ff`00412f2c : 00000000`02db1118 00000000`0603a228 00000000`2191ec88 000007fe`f3e7063c : 0x7ff`004133b6 000007fe`f36796bb : 00000000`02db1118 00000000`0603a228 00000000`0603a3a8 000007fe`f2f61545 : 0x7ff`00412f2c 000007fe`f2f60d3c : 00000000`0603a3a8 00000000`1c8573d8 00000000`2191ec40 000007fe`f3e6ed1e : mscorlib_ni+0xaa96bb 000007fe`f3679455 : 00000000`12871030 00000000`0603a3a8 00000000`2191ec88 00000000`00000001 : mscorlib_ni+0x390d3c 000007fe`f367d9d0 : 00000000`0603a3a8 00000000`033d1018 00000000`0603a3a8 000007fe`f2fe71a9 : mscorlib_ni+0xaa9455 000007fe`f2f96be8 : 000007fe`f2c4e7f8 00000000`2191f140 000007ff`00022020 00000000`0316bf48 : mscorlib_ni+0xaad9d0 000007fe`f2f96a85 : 48cc31a4`460aef00 00000000`09103290 00000000`00000000 00000004`00000005 : mscorlib_ni+0x3c6be8 000007fe`f3e621b4 : 48cc31a4`460aef03 000007fe`f2f66e32 00000000`09103200 00000001`000001bb : mscorlib_ni+0x3c6a85 000007fe`f3e67129 : 00000000`2191f208 00000000`02db11e0 00000000`21910000 00000000`00000000 : clr!CallDescrWorker+0x84 000007fe`f3e671a3 : 00000000`2191ef48 00000000`00000000 00000000`2191ef50 00000000`00000000 : clr!CallDescrWorkerWithHandler+0xa9 000007fe`f3e6c5b5 : 00000000`2191f6a8 00000000`2191f4c8 00000000`1c8573d0 00000000`00000001 : clr!MethodDesc::CallDescr+0x2f4 000007fe`f403c42f : 00000000`2191f6a8 00000000`2191f658 00000000`2191f4c8 00000000`00000000 : clr!MethodDescCallSite::CallWithValueTypes_RetArgSlot+0x35 000007fe`f3ef6c5a : ffffffff`fffffffe 000007fe`f3e33489 ffffffff`fffffffe 00000000`1c8573d0 : clr!QueueUserWorkItemManagedCallback+0x44 000007fe`f3ef6bef : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : clr!SystemDomain::LoadBaseSystemClasses+0x43e 000007fe`f3ef6b5c : 00000000`00159770 00000000`2191f380 00000000`00000000 00000000`2191f3c8 : clr!SString::Equals+0x190 000007fe`f403c2f9 : ffffffff`ffffffff 00000000`1c8573d0 00000000`00000000 000007fe`f3e333eb : clr!CParseUtils::TrimWhiteSpace+0x119 000007fe`f3f04bf5 : 00000000`00000c0a 00000000`00000000 00000000`1c8573d0 000007fe`f3ecd2d0 : clr!ManagedPerAppDomainTPCount::DispatchWorkItem+0xe6 000007fe`f4004377 : 00000000`00000000 00000000`1dfa6501 000000f2`00f200f2 00000000`00000c0a : clr!ThreadpoolMgr::NewWorkerThreadStart+0x49f 000007fe`f4002c22 : 00000000`00000000 00000000`00000000 00000000`2191f7a0 00000000`00000000 : clr!ThreadpoolMgr::WorkerThreadStart+0x3b 00000000`76e9f56d : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : clr!Thread::intermediateThreadProc+0x7d 00000000`770d3281 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0xd 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x1d
En mi pila administrada mi último frame es System.Text.StringBuilder.ToString(), así que asumimos que estamos creando memoria para ese string. Si miramos a la pila nativa observamos que justo en ese punto se estaba haciendo una recolección de basura.
La secuencia es: FramedAllocateString -> GCHeap::Alloc -> gc_heap::try_allocate_more_space -> GCHeap::GarbageCollectGeneration -> gc_heap::garbage_collect -> :gc_heap::gc1
Este punto estamos seguros de que realmente se estaba reservando memoria para ese string, pero como no habría más memoria disponible se había lanzado una recolección de basura y ahí es donde el runtime encontró la corrupción del heap.
Hay un commando muy util en WinDBG !verifyheap que nos permite comprobar que hay signos de corrupción en el heap adminsitrado.
0:044> !verifyheap -verify will only produce output if there are errors in the heap The garbage collector data structures are not in a valid state for traversal. It is either in the "plan phase," where objects are being moved around, or we are at the initialization or shutdown of the gc heap. Commands related to displaying, finding or traversing objects as well as gc heap segments may not work properly. !dumpheap and !verifyheap may incorrectly complain of heap consistency errors. object 0000000006fb6ec8: bad member 0000000008f1b750 at 0000000006fb6ef8 curr_object: 0000000006fb6ec8 Last good object: 0000000006fb6e50 ----------------
El commando !verifyheap nos está diciendo que en ese preciso momento se estaba realizando una recolección de basura que las estructuras del gc puede que no estén en un estado válido para que este comando extraiga toda la información, pero al final del reporte encontramos que hay un objeto que tiene un miembro inválido, este objeto es un System.IO.StreamReader y el miembro invalido es System.Char[] 0000000008f1b750 charBuffer.
0:044> !do 0000000006fb6ec8 <Note: this object has an invalid CLASS field> Name: System.IO.StreamReader MethodTable: 000007fef30951a0 EEClass: 000007fef2cce0d0 Size: 96(0x60) bytes File: C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll Fields: MT Field Offset Type VT Attr Value Name 000007fef30d9518 40001cd 8 System.Object 0 instance 0000000000000000 __identity 000007fef3091d08 4001fda c80 System.IO.TextReader 0 shared static Null >> Domain:Value 00000000001a85b0:NotInit << 000007fef30dd718 4001fde 54 System.Boolean 1 instance 1 _closable 000007fef30e3658 4001fdf 10 System.IO.Stream 0 instance 0000000006fb6e50 stream 000007fef30e3968 4001fe0 18 System.Text.Encoding 0 instance 00000000032d6848 encoding 000007fef30ac110 4001fe1 20 System.Text.Decoder 0 instance 0000000006fb6f28 decoder 000007fef30e0d00 4001fe2 28 System.Byte[] 0 instance 0000000008f1a738 byteBuffer 000007fef30db4a8 4001fe3 30 System.Char[] 0 instance 0000000008f1b750 charBuffer 000007fef30e0d00 4001fe4 38 System.Byte[] 0 instance 000000000287ff88 _preamble 000007fef30dc918 4001fe5 40 System.Int32 1 instance 0 charPos 000007fef30dc918 4001fe6 44 System.Int32 1 instance 0 charLen 000007fef30dc918 4001fe7 48 System.Int32 1 instance 0 byteLen 000007fef30dc918 4001fe8 4c System.Int32 1 instance 0 bytePos 000007fef30dc918 4001fe9 50 System.Int32 1 instance 4096 _maxCharsPerBuffer 000007fef30dd718 4001fea 55 System.Boolean 1 instance 1 _detectEncoding 000007fef30dd718 4001feb 56 System.Boolean 1 instance 0 _checkPreamble 000007fef30dd718 4001fec 57 System.Boolean 1 instance 0 _isBlocked 000007fef30951a0 4001fdd c88 ...m.IO.StreamReader 0 shared static Null >> Domain:Value 00000000001a85b0:NotInit <<
¿Qué podemos hacer con este problema?
Teniendo en cuenta que es un problema de corrupción en la pila lo que tenemos que hacer es simplemente llamar al servicio de soporte de Microsoft y notificarle lo que hemos encontrado.
Happy debugging. Luis.
¿De donde sale este DataRow?
Hace poco gracias al equipo DOT de PlainConcepts, tuve oportunidad de participara en un caso muy interesante, el software de la empresa en cuestión tenía un problema de fuga de memoria porque las referencias de los objetos no eran recolectadas por el GC, así que WinDGB en mano me puse a averiguar porque era.
Una de las primeras cosas que se hace cuando te encuentras un caso como este es intentar que la aplicación que vas a depurar se encuentre en ese caso, ósea que este fugando memoria, en mi caso lo era así que el segundo paso es hacer un dump completo de la aplicación. Esto lo podemos hacer con una herramienta que viene en la carpeta de instalación del “Debugging tools for Windows” que se llama ADPlus.vbs, la sintaxis sería la siguiente:
adplus -hang -pn miprograma.exe
Una vez hecho eso tenemos un dump completo de la aplicación en el estado de fuga de memoria que os comentaba antes, ahora tenemos que ponernos a investigar. Una de las cosas que suelo hacer siempre que me encuentro con un caso de fuga de memoria es hacer un !dumpheap para ver que nos encontramos en el heap (monton) de .NET, que es básicamente donde están todos los objetos que se instancian en el ciclo de vida de una aplicación .NET.
Aquí podemos ver el resultado en WinDBG:
0:003> !dumpheap -stat total 5003168 objects Statistics: MT Count TotalSize Class Name 6b441898 1 12 System.Collections.Generic.GenericEqualityComparer`1[[System.String, mscorlib]] 6b440b48 1 12 System.Security.Permissions.ReflectionPermission 6b43f850 1 12 System.Resources.FastResourceComparer 6b43ccec 1 12 System.__Filters 6b43cc9c 1 12 System.Reflection.Missing 6b43cba4 1 12 System.RuntimeType+TypeCacheQueue 6b43bcb8 1 12 System.Runtime.InteropServices.GCHandle 6b439cf0 1 12 System.RuntimeTypeHandle 6b4382c8 1 12 System.Text.DecoderExceptionFallback 6b438284 1 12 System.Text.EncoderExceptionFallback 6b41c7a8 1 12 System.Security.Permissions.FileDialogPermission 6b41c76c 1 12 System.Security.PolicyManager 6b41abec 1 12 System.Reflection.__Filters 6b41a004 1 12 System.DBNull 61e8508c 1 12 System.Data.IndexField[] 61e7f984 1 12 Bid+BindingCookie 00584a78 1 12 DataRowMemoryLeak.Foo 6ba6bc08 1 16 System.IO.TextReader+SyncTextReader 6b440ca0 1 16 System.Enum+HashEntry 6b43fad4 1 16 System.Resources.ResourceReader+TypeLimitingDeserializationBinder 6b43a0d8 1 16 System.Int64 6b439ef0 1 16 System.Globalization.GlobalizationAssembly 6b417760 1 16 System.Security.Permissions.UIPermission 61e85f8c 1 16 System.Data.DataRowBuilder 6b445bd4 1 20 System.Environment+ResourceHelper 6b441bac 1 20 System.Security.Permissions.EnvironmentPermission 6b438988 1 20 System.Text.StringBuilder 6b437a6c 1 20 Microsoft.Win32.SafeHandles.SafeFileMappingHandle 6b437a14 1 20 Microsoft.Win32.SafeHandles.SafeViewOfFileHandle 6b437988 1 20 System.Text.InternalEncoderBestFitFallback 61e85754 1 20 System.Data.DataRowCollection 61e7f9c0 1 20 Bid+AutoInit 6b4447e8 1 24 System.Collections.BitArray 6b441914 1 24 System.String[][] 6b440e8c 2 24 System.OrdinalComparer 6b43a470 1 24 System.OperatingSystem 6b437d2c 1 24 System.IO.TextWriter+SyncTextWriter 6b4379d4 1 24 System.Text.InternalDecoderBestFitFallback 6b421078 1 24 System.Collections.Generic.List`1[[System.Int32, mscorlib]] 6b4192a0 1 24 System.Collections.Generic.List`1[[System.WeakReference, mscorlib]] 6b417bb0 1 24 System.Collections.Stack 61e85e44 1 24 System.Collections.Generic.List`1[[System.Data.Index, System.Data]] 61e854f8 1 24 System.Collections.Generic.List`1[[System.Data.DataViewListener, System.Data]] 61e8520c 1 24 System.Collections.Generic.List`1[[System.Data.DataView, System.Data]] 61e7da60 1 24 <CrtImplementationDetails>.ModuleUninitializer 6b43ecb4 1 28 System.Text.DecoderNLS 6b438f18 1 28 System.SharedStatics 6b4383a8 1 28 System.IO.Stream+NullStream 6b438188 1 28 System.Text.EncoderNLS 6b437bfc 1 28 Microsoft.Win32.Win32Native+InputRecord 6b441c5c 1 32 System.Text.UnicodeEncoding+Decoder 6b43ec2c 1 32 System.Text.UTF8Encoding+UTF8Decoder 6b43ae5c 1 32 System.Security.PermissionTokenFactory 6b43820c 1 32 System.Threading.IOCompletionCallback 6b438108 1 32 System.Text.UTF8Encoding+UTF8Encoder 6b41cbd8 1 32 System.Security.Util.Tokenizer+StringMaker 6b415650 1 32 System.Runtime.CompilerServices.RuntimeHelpers+CleanupCode 6b4155c4 1 32 System.Runtime.CompilerServices.RuntimeHelpers+TryCode 6b415394 1 32 System.Text.UnicodeEncoding 61e856e4 1 32 System.Data.ConstraintCollection 61e85630 1 32 System.Data.RecordManager 61e7f90c 1 32 Bid+CtrlCB 6b43ac78 1 36 System.Security.Permissions.FileIOPermission 6b43a028 1 36 System.Int64[] 6b41d0e0 3 36 System.Security.Policy.AllMembershipCondition 6b418058 1 36 System.Resources.RuntimeResourceSet 6b43fa50 1 40 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 6b43f694 1 40 System.IO.BinaryReader 6b43d778 2 40 Microsoft.Win32.SafeHandles.SafeFileHandle 6b43adb0 2 40 System.Security.PermissionToken 6b41edfc 1 40 System.Int32[][] 6b439338 1 44 System.AppDomainSetup 6b415be0 1 44 System.Threading.ReaderWriterLock 61e87720 1 44 System.Data.Common.StringStorage 61e875fc 1 44 System.Data.Common.Int32Storage 61e857c4 1 44 System.Data.DataRowCollection+DataRowTree 6b440e18 3 48 System.CultureAwareComparer 6b43d9e4 4 48 System.UInt16 6b43ba44 3 48 System.Text.DecoderReplacementFallback 6b43b9f4 3 48 System.Text.EncoderReplacementFallback 6b43a3f4 2 48 System.Version 6b41d2a0 4 48 System.Security.Permissions.StrongNamePublicKeyBlob 6b43f74c 1 52 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Resources.ResourceLocator, mscorlib]] 6b415314 1 52 System.Resources.ResourceManager 6b43b8f0 2 56 System.Text.UTF8Encoding 6b438e20 1 56 System.Threading.Thread 6b4164b4 1 56 System.LogLevel[] 61e85674 1 56 System.Data.DataColumnCollection 6b440be4 1 60 System.UInt64[] 6b4242f8 1 60 System.IO.StreamReader+NullStreamReader 6b42420c 1 60 System.IO.StreamReader 6b41ac44 2 64 System.Reflection.TypeFilter 6b4190d8 2 64 System.EventHandler 6b43b674 1 68 System.Globalization.CultureTable 6b439d98 3 72 System.Reflection.Assembly 6b438b90 1 72 System.ExecutionEngineException 6b438b00 1 72 System.StackOverflowException 6b438a70 1 72 System.OutOfMemoryException 6b437c50 2 72 System.IO.__ConsoleStream 6b43786c 1 76 System.Text.SBCSCodePageEncoding 6b41d320 5 80 System.Security.Policy.ZoneMembershipCondition 6b41d230 4 80 System.Security.Policy.PolicyStatement 6b417fdc 1 80 System.Resources.ResourceReader 6b43cd48 3 96 System.Reflection.MemberFilter 6b43c23c 2 96 System.Reflection.Module 6b43a72c 8 96 System.Security.Permissions.SecurityPermission 6b4156d4 3 96 System.Globalization.CompareInfo 6b43cc64 1 100 System.Reflection.MetadataArgs+SkipAddresses 6b43b708 5 100 System.Globalization.CultureTableItem 6b43902c 1 100 System.AppDomain 6b4163c0 1 108 System.SwitchStructure[] 6b437e88 2 112 System.IO.StreamWriter 6b416db0 2 120 System.Collections.Hashtable+SyncHashtable 6b439f44 2 128 System.IO.UnmanagedMemoryStream 6b422314 4 128 System.Collections.ArrayList+SyncArrayList 6b417b4c 7 140 Microsoft.Win32.SafeHandles.SafeRegistryHandle 6b43a510 4 144 System.Security.PermissionSet 6b438c20 2 144 System.Threading.ThreadAbortException 6b41f04c 3 156 System.Security.Policy.PolicyLevel 6b43ae10 5 180 System.Security.Util.TokenBasedSet 6b43aa98 17 204 System.Int32 6b41794c 7 224 Microsoft.Win32.RegistryKey 6b43b7b0 2 256 System.Globalization.NumberFormatInfo 6b438468 22 264 System.Object 61e84fb4 2 296 System.Data.DataColumn 61e82cc8 1 296 System.Data.DataTable 6b43b624 7 336 System.Globalization.CultureTableRecord 6b43fc20 1 352 System.Collections.Generic.Dictionary`2+Entry[[System.String, mscorlib],[System.Resources.ResourceLocator, mscorlib]][] 6b41ce18 10 360 System.Security.Policy.UnionCodeGroup 6b43b448 6 408 System.Globalization.CultureInfo 6b41f0a4 9 432 System.Security.NamedPermissionSet 6b43aea0 18 1008 System.Collections.Hashtable 6b41cd3c 65 1560 System.Security.Policy.StrongNameMembershipCondition 6b43b2bc 12 1676 System.Byte[] 6b4399cc 110 2200 System.RuntimeType 6b43af9c 18 2664 System.Collections.Hashtable+bucket[] 6b43947c 24 3444 System.Char[] 6b41cae8 216 6048 System.Security.SecurityElement 6b43a87c 266 6384 System.Collections.ArrayList 61e85bd0 347 9716 System.Data.RBTree`1+TreePage[[System.Data.DataRow, System.Data]] 00466bf0 235 395780 Free 6b43a9e8 368 4455624 System.Int32[] 6b43884c 1000553 31651760 System.String 61e85d88 347 32089008 System.Data.RBTree`1+Node[[System.Data.DataRow, System.Data]][] 6b414e78 320 37795900 System.Object[] 6b415b88 2999997 47999952 System.WeakReference 61e85048 999999 63999936 System.Data.DataRow Total 5003168 objects
El caso es que tenía aproximadamente un millón de instancias de la clase System.Data.DataRow, que como bien sabéis representa una fila de un DataTable de ADO.NET, pues resulta que la aplicación por algún motivo seguía teniendo las referencias a esas DataRow.
Ya sabemos cuál es el problema, ahora tenemos que saber desde donde se referencia a esas DataRow y encontrar el trozo de código que lo hace, esto normalmente es lo más complicado porque tiene que conocer el software que estás depurando y en mi caso son clientes externos y no conozco el caso, así que lo que normalmente hago son dos cosas:
· Con el comando !gcroot le paso una dirección de memoria de uno de esos DataRow para ver desde que Thread y que pila se ha referenciado el objeto. Con el identificador del Thread cambio el WinDGB del Thread actual al nuevo thread con el comando “~23s” siendo 23 el identificador del Thread y ahora ejecuto un !clrstack con el que puedo ver la pila administrada del Thread actual. Ahora simplemente tengo que buscar en esas clases y en esos métodos referencias a los DataRows para encontrar la fuente de las referencias. Además puedo utilizar el comando !dso que me permite ver los parámetros de las funciones y las variables locales de todos lo métodos de la pila actual.
0:000> !dso
OS Thread Id: 0x7a0 (0)
ESP/REG Object Name
0030ef94 13cff17c Microsoft.Win32.SafeHandles.SafeFileHandle
0030efa4 13cff17c Microsoft.Win32.SafeHandles.SafeFileHandle
0030efd8 13cff3e0 System.Byte[]
0030efdc 13cff190 System.IO.__ConsoleStream
0030effc 13cff1c0 System.IO.StreamReader
0030f000 13cff1c0 System.IO.StreamReader
0030f018 13cff1c0 System.IO.StreamReader
0030f01c 13cff6f8 System.IO.TextReader+SyncTextReader
0030f03c 13cff6f8 System.IO.TextReader+SyncTextReader
0030f060 13cfe1b8 System.Int64
0030f064 1017bd90 System.String total memory -
0030f068 13cfe1a8 System.WeakReference
0030f06c 0b597af8 System.Data.DataRow
0030f070 0180a954 System.Data.DataRowCollection
0030f074 01866d48 System.Collections.Generic.List`1[[System.WeakReference, mscorlib]]
0030f078 0180a954 System.Data.DataRowCollection
0030f07c 13cfe1ec System.String total memory - 218038312
0030f080 13cfe1b8 System.Int64
0030f084 1017bd90 System.String total memory -
0030f088 01866d70 System.Data.DataTable
0030f0a4 01866d3c DataRowMemoryLeak.Foo
0030f0b4 0b597af8 System.Data.DataRow
0030f0b8 0180a954 System.Data.DataRowCollection
0030f0bc 01866d48 System.Collections.Generic.List`1[[System.WeakReference, mscorlib]]
0030f0c0 0180a954 System.Data.DataRowCollection
0030f0c4 01866d70 System.Data.DataTable
0030f0c8 01866d3c DataRowMemoryLeak.Foo
0030f0e8 0b597af8 System.Data.DataRow
0030f0ec 0180a954 System.Data.DataRowCollection
0030f0f0 01866d48 System.Collections.Generic.List`1[[System.WeakReference, mscorlib]]
0030f0f4 0180a954 System.Data.DataRowCollection
0030f0f8 01866d70 System.Data.DataTable
0030f0fc 01866d3c DataRowMemoryLeak.Foo
0030f118 01866d24 System.String ID
0030f120 0180a954 System.Data.DataRowCollection
0030f12c 01866d08 System.String Name
0030f13c 01866d24 System.String ID
0030f148 01866d08 System.String Name
0030f150 01866d70 System.Data.DataTable
0030f154 01866d3c DataRowMemoryLeak.Foo
0030f158 0b597af8 System.Data.DataRow
0030f15c 01866d70 System.Data.DataTable
0030f160 01866d3c DataRowMemoryLeak.Foo
0030f16c 0180a1dc System.Object[] (System.String[])
0030f400 0180a1dc System.Object[] (System.String[])
0:000> !gcroot 088a1630 Note: Roots found on stacks may be false positives. Run "!help gcroot" for more info. eax: 0030eec4 (invalid object) Scan Thread 0 OSTHread 7a0 ESP:30eeb4: 0030eec4 (invalid object) ESP:30f06c:Root:0b597af8(System.Data.DataRow)-> 01866d70(System.Data.DataTable)-> 0180a954(System.Data.DataRowCollection)-> 0180a968(System.Data.DataRowCollection+DataRowTree)-> 07f166bc(System.Object[])-> 0b033360(System.Data.RBTree`1+TreePage[[System.Data.DataRow, System.Data]])-> 088a1630(System.Data.RBTree`1+Node[[System.Data.DataRow, System.Data]][])
· Si todo esto no funciona también puedo hacer otro tipo de análisis de la aplicación. Con el Reflecto, programa que por cierto todo programador de .net debería de tener, podemos agregar la referencia del ensamblado el cual queremos analizar y el ensamblado de la clase la cual queremos saber si nuestro ensamblado referencia. En este caso miEnsamblado.dll y System.Data.dll que contiene System.Data.DataRow y pulsando el botón contrario encima de la clase tengo la opción de Analyze que me permite ver varias opciones.
- Depends On
- Used By
- Exposed By
- Instantiated By
· Como podréis imaginar las dos que me interesan son Used By y Instantiated By, en este caso Instantiated By no tanto porque no soy el responsable directo de crear las instancias de los DataRow, pero Used By me va a permitir ver de los ensamblados que tengo cargados cuales referencia a esta clase.
Así que como podéis ver la vida de un depurador no es fácil pero hay una serie de trucos que os pueden ayudar a solucionar la vida.
Espero que os haya gustado y hasta otra.
Saludos. Luis.
Actualización: (16 enero 2008)
Aquí esta la URL del ejemplo usado con WinDGB, http://www.luisguerrero.net/downloads/DataRowMemoryLeak.zip
Para sacar una dirección de memoria de un objeto y después usarlo para por ejemplo !do (DumpObject) o !gcroot tenemos que usar el comando !dumpheap que nos muestra toda la lista de objetos de hay en el heap (montón).net,SOS,Trucos.
Si hacemos un comando como este: !dumpheap –type System.Data.DataRow tenemos lo siguiente:
Address MD
0b6d6598 77a95048 64
0b6d65f8 77a95048 64
0b6d6658 77a95048 64
0b6d66b8 77a95048 64
0b6d6718 77a95048 64
0b6d6778 77a95048 64
0b6d67d8 77a95048 64
0b6d6838 77a95048 64
0b6d6898 77a95048 64
0b6d68f8 77a95048 64
0b6d6958 77a95048 64
0b6d69b8 77a95048 64
0b6d6a18 77a95048 64
0b6d6a78 77a95048 64
total 1000696 objects
Statistics:
MT Count TotalSize Class Name
77a95f8c 1 16 System.Data.DataRowBuilder
77a95754 1 20 System.Data.DataRowCollection
77a957c4 1 44 System.Data.DataRowCollection+DataRowTree
77a95bd0 347 9716 System.Data.RBTree`1+TreePage[[System.Data.DataRow, System.Data]]
77a95d88 347 32089008 System.Data.RBTree`1+Node[[System.Data.DataRow, System.Data]][]
77a95048 999999 63999936 System.Data.DataRow
Total 1000696 objects
0:004> !do 0b6d6a78
Name: System.Data.DataRow
MethodTable: 77a95048
EEClass: 779adf30
Size: 64(0x40) bytes
(C:\Windows\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll)
Fields:
MT Field Offset Type VT Attr Value Name
77a92cc8 4000720 4 ...em.Data.DataTable 0 instance 01956d70 _table
77a95674 4000721 8 ...aColumnCollection 0 instance 018fa804 _columns
71ebaa98 4000722 18 System.Int32 1 instance -1 oldRecord
71ebaa98 4000723 1c System.Int32 1 instance 999964 newRecord
71ebaa98 4000724 20 System.Int32 1 instance -1 tempRecord
71ebaa98 4000725 24 System.Int32 1 instance 999965 _rowID
77ea7fc8 4000726 28 System.Int32 1 instance 0 _action
71ebea68 4000727 38 System.Boolean 1 instance 0 inChangingEvent
71ebea68 4000728 39 System.Boolean 1 instance 0 inDeletingEvent
71ebea68 4000729 3a System.Boolean 1 instance 0 inCascade
77a94fb4 400072a c ...m.Data.DataColumn 0 instance 00000000 _lastChangedColumn
71ebaa98 400072b 2c System.Int32 1 instance 0 _countColumnChange
77ec3bf4 400072c 10 ...em.Data.DataError 0 instance 00000000 error
71eb8468 400072d 14 System.Object 0 instance 00000000 _element
71ebaa98 400072e 30 System.Int32 1 instance 22676893 _rbTreeNodeId
71ebaa98 4000730 34 System.Int32 1 instance 999965 ObjectID
71ebaa98 400072f 498 System.Int32 1 static 999999 _objectTypeCount
0:004> !dumpmt 77a95048
EEClass: 779adf30
Module: 779a1000
Name: System.Data.DataRow
mdToken: 02000081 (C:\Windows\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll)
BaseSize: 0x40
ComponentSize: 0x0
Number of IFaces in IFaceMap: 0
Slots in VTable: 99
De la primera columna podemos sacar la dirección del objeto que queremos investigar.
Forzar un BSOD en Windows
Hola a todos de nuevo !!
Cualquiera me puede decir que el título del post es un poco raro, y lo es !!
, resulta que quiero forzar un pantallazo azul, pero, ¿porqué?.
Como bien sabéis Windows es perfecto (cási perfecto) y solamente se puede desencadenar un BSOD cuando se produce una operación no valida dentro de la memoria del Kernel. Esto no ocurre todas las veces que uno quisiera.
Y claro imaginad por un momento que queréis hacer un dump completo porque tenéis un memory leak en una aplicación nativa que usa memoria virtual, y queréis explorar el árbol de VAD (Virtual Address Descriptors), que son los identificadores del Kernel de Windows para ver en que se está gastando la memoria, pero claro a esto solo tenemos acceso desde una depuración en modo kernel, !vad solo funciona si WinDBG está en modo kernel.
Pues nos os preocupéis que el driver de vuestro teclado os salvará la vida, tenéis que ir a esta entrada de la base de conocimiento de Microsoft y os explican como activarlo.
http://support.microsoft.com/kb/244139
Y funciona!!
Saludos. Luis.
[Evento] Depuración y Optimización Avanzada de Aplicaciones (recursos)
Hola a todos!!. Primero dar gracias a todos por haber venido a verme a la charla, y gracias también por los mails de agradecimiento!!.
La presentación de power point de la charla.
El sitio web de ejemplo aquí.
TinyGet (Herramienta para hacer las peticiones a la web) está disponible como IIS 6 Resource ToolKit http://support.microsoft.com/kb/840671
Libros:
CLR Via C#

Este libro es uno de los mejores. Explica el funcionamiento del CLR (Common Language Runtime) expuesto desde C#.
Professional .NET Framework 2.0

Windows Internals

Windows Internals es el mejor libro de referencia de Windows, esta 5º edición incluye Windows Vista y Server 2008. Es un libro fundamental para conocer la plataforma Windows.
Blogs:
http://blogs.technet.com/markrussinovich/ (Mark Russinovich) Creador de la suite sysinternals
http://www.wintellect.com/cs/blogs/jrobbins/
Herramientas:
En este blog en post anteriores podeís encontrar varios post de como se configura el entorno de depuración con símbolos y demás. Además de eso varias herramientas útiles.
Process explorer, sin duda la herramienta definitiva para extraer información de que está haciendo Windows. Nos muestra información sobre rendimiento, consumo de memoria, threads, manejadores y demás.
Process Monitor, igual que process explorer solo que es un registro de la actividad de Windows, en tres categorías Threads, Registro y IO
Notas:
Muchos de vosotros me habeís enviado mails preguntándome varias cosas respondo a todo el mundo desde aquí porque son preguntas interesantes.
Q: Yo vivia muy feliz antes de este evento, ahora siento miedo ¿Porqué?
A: Bueno, las razones son varias, pero creo que al exponer lo complicado que puede ser el desarrollo de aplicaciones uno siente miedo ante esto. Teniendo en cuenta que durante el evento se ha hablado de .net que es un lenguaje de alto nivel, en el que hay muchas cosas que ayudan a programar y hacer las cosas más fáciles, resulta más chocante aún. El caso es que la informática es una de las disciplinas más complicadas que existen por ahí afuera. Y si no me creeis leeros este ensayo de Edsget W. Dijkstra desde aquí.
Q: Todos los ejemplos han sido de una aplicación ASP.NET atacando directamente al proceso w3wp.exe, ¿Es posible hacer esto con otro tipo de aplicaciones?
A: Desde luego las demos estaban preparadas así pero se pueden generar dumps de aplicaciones de escritorio ya sea Windows Forms, WPF o lo que sea. De hecho este tipo de depuración es especial porque está pensada para cuando no se está delante de la maquina que tiene el problema.
[Evento] Depuración y Optimización Avanzada de Aplicaciones
Hola a todos, el próximo jueves 2 de octubre participo en la charla “Depuración y Optimización Avanzada de Aplicaciones” que se celebrará en el CIIN (Centro de innovación de Microsoft de Cantabria) por parte de Plain Concepts, y con mi compañero Pablo Doval.
Por cierto el evento se retransmitirá online a través de la web de Microsoft (el enlace a final del post).
Cuando desarrollamos Software, pasamos por una serie de etapas, desde el diseño hasta el despliegue final, en las que buscamos proporcionar soluciones que resuelvan de forma excelente los problemas y requerimientos planteados. Sin embargo, el camino no es fácil y muchas veces nos olvidamos de aspectos muy importantes como son la depuración, la optimización y el testeo de nuestras aplicaciones como camino a lograr aplicaciones con el mayor nivel de calidad posible. Para cubrir esta etapa imprescindible en todo desarrollo de software, os presentamos en colaboración con Plain Concepts una nueva jornada de la que se puede hablar durante días y días: Depuración y Optimización Avanzada de Aplicaciones.
La jornada que os proponemos será gratuita por cortesía de Plain Concepts y constará de un repaso de la depuración básica con Visual Studio, profiling de problemas de rendimiento y depuración avanzada con WinDbg. Se tocarán temas como análisis de rendimiento y pruebas de carga, localización de puntos calientes y cuellos de botella, resolución de problemas esquivos (cuelgues, pérdidas, bloqueos, CTDs…) tanto en vivo como de modo postmortem mediante el análisis de volcados de memoria y otras técnicas de depuración. También se abordarán, durante el transcurso de la sesión, aspectos de soportabilidad como la construcción de un servidor de símbolos sincronizados, la generación de volcados de memoria en nuestras aplicaciones, etc. Como viene siendo habitual, la parte teórica irá acompañada de demostraciones prácticas sobre escenarios habituales de optimización y resolución de problemas.
La jornada será impartida por Pablo Alvarez Doval. Pablo ha estado vinculado a las tecnologías Microsoft desde el inicio de su carrera profesional, y fue miembro del GTSC de Microsoft en el equipo de SQL Server. Actualmente trabaja para Plain Concepts, donde lidera la iniciativa DOT (Debugging & Optimization Team), destinada a ayudar a sus clientes en la resolución de problemas de rendimiento o problemas de difícil trazabilidad. Dispone de un blog en http://geeks.ms/blogs/palvarez, donde aborda principalmente temas de rendimiento, WinDbg y SQL Server.
http://www.ciin.es/web/servicios/eventos/Paginas/DepOptApp021008.aspx?Fecha=02-10-2008
Disponible .NET Framework 3.5 SP1 Sources
A través del blog del Reference Source Code Center Team Blog, http://blogs.msdn.com/rscc/archive/2008/08/28/net-framework-3-5-sp1-sources-are-available.aspx, disponible el código fuente del .NET Framework 3.5 SP1. Si trabajáis con el código fuente del framework mientras depuráis las aplicaciones, esta release es justo lo que estabais buscando. Además en el SP1 de Visual Studio 2008 trae directamente el soporte para el código fuente del framework.
Resuelto – Usar un origen http en un BitmapImage ralentiza tu aplicación WPF
Como sabréis hace poco escribí un post sobre un problema que encontré dentro de WPF relacionado con el rendimiento de una aplicación que estaba desarrollando. El caso es que además de escribir un post inicie también un comentario dentro de la web de connect de Microsoft en https://connect.microsoft.com/VisualStudio/ para que Microsoft supiera que está pasando, pues bien hoy me han respondido al comentario y resulta que efectivamente es un bug y que lo van a solucionar.
Aquí tenéis el enlace del post original
y en enlace de connect
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=344785 (requiere inicio de sesión)
Lo interesante de este bug que como una herramienta como WINDBG y SOS nos puede ayudar a solucionar un problema en nuestro software.
Saludos a todos.
Experiencia de uso de .Net Framework 3.5 SP1
Como ya comente en otro post, ya ha salido el .net Framework 3.5 SP1 y el Visual Studio 2008 SP1, pues bien quiero comentar mi experiencia de uso desde que lo instale en mi portátil. Tengo que aclarar que mi portátil es tanto de uso profesional como de uso personal, así que es importante para mí que este service pack no rompa las aplicaciones que estoy desarrollando.
Voy a comentar desde varios punto de vista que características incluye este service pack que no se han comentado en los post oficiales de Microsoft y cosas que yo considero importantes.
Depuración
Dentro de la sección de depuración hay varias cosas interesantes a mencionar pero solo una negativa a comentar.
La única pega que tiene que el SP1 es que al cambiar las versiones de los ensamblados del framework la depuración con el código fuente del framework no está disponible porque no podemos bajarnos los símbolos de depuración con la información del código fuente de Microsoft. Por ejemplo, mscorlib.dll tiene de versión 2.0.50727.3031 (netfxsp.050727-3000).
Por lo demás vamos a comentar cosas positivas en el área de depuración que incluye el SP1 de Visual Studio 2008.
Dentro del menú de herramientas -> Opciones -> Depuración tenemos una opción interesante.
- Enable .Net Framework source stepping, que nos permite depurar el código fuente del framework simplemente marcando esta opción.
Dentro de lo que es la depuración normal de una aplicación nos podemos encontrar con llamadas complejas que a su vez llaman a otras funciones que devuelven parámetros para pasarlo a la función principal, pues bien ahora podemos seleccionar en qué función queremos saltar, por ejemplo tenemos este trozo de código.
1: Parse(RequestManager.Current.MakeRequestOfertas());
En el que se realizan tres llamadas a funciones, Parse, al singleton de RequestManager y al método MakeRequesOfertas, pues bien imaginemos que queremos depurar pero solo nos interesa la función MakeRequestOfertas, normalmente pulsado F11 y entrado dentro de las funciones pasaríamos por el singleton del RequestManager.Current todas las veces, lo que puede hacerse un poco molesto, pues ahora en el menú contextual podemos especificar a qué función saltar.
Siguiendo con esta característica del depurador de Visual Studio, una de las cosas más molestas cuando se depura código es entrar dentro de las propiedades cuando se está depurando código lo que nos hace perder un tiempo en recorrer todas las instrucciones que hay dentro de la propiedad. Dentro del framework hay un atributo que nos permite decirle al depurador que no salte dentro del código de una función para no perder tiempo en depurarla, este atributo System.Diagnostics.DebuggerStepThroughAttribute únicamente se puede usar para clases, estructuras, constructores y métodos. Pues bien ahora con el SP1 del Visual Studio 2008, en el menú contextual en modo depuración tenemos una opción que nos permite que habilitar la característica de saltar sobre las propiedades y sobrecarga de operadores (Step over properties and operators).
Otra característica más del depurador es que ahora podemos hacer depuración remota con Windows Vista, cosa que antes no era posible. Además de esto se han corregido problemas con la depuración de aplicaciones multihilo.
La depuración de consultas LINQ también se ha mejorado, permitiendo ver los resultados de una consulta LINQ directamente con el depurador, pero no se soporta la edición en tiempo de ejecución durante la depuración
Como últimas características, se ha mejorado la depuración de aplicaciones de WCF y de scripts, como por ejemplo JavaScript
Runtime WPF
Otra de las características que nos prometían con este service pack es un mejor rendimiento de las aplicaciones de WPF, y lo han conseguido.
Si miramos a la arquitectura actual de WPF, hay un componente no administrador dentro del arquitectura milcore.dll que es la api responsable de convertir las llamadas de dibujado de geometría de WPF a código que llama a DirectX, esto permite que nuestras aplicaciones en WPF estén aceleradas por hardware de una manera transparente, es también esta milcore.dll uno de los principales componentes que utiliza el Desktop Windows Manager para componer la interfaz de usuario de Windows Vista y permitirnos que podamos hacer las pre visualizaciones de las aplicaciones y el Switch3D.
Pues bien ahora en una aplicación WPF del .net Framework 3.5 SP1, milcore.dll ha desaparecido de los módulos cargados y no está en la pila de ejecución de tu proceso actual. ¿Qué es lo que hay ahora?, pues si nos fijamos en los Threads que hay en una aplicación cualquiera de WPF vemos que hay una nueva dll llamada wpfgfx.dll, que es la que se encarga de dibujar los gráficos en WPF. Esto es un cambio de concepto interesante porque ahora el modelo de dibujado de una aplicación WPF es multihilo. Esto que significa, pues que el hilo principal de tu aplicación, cuando solicite el dibujado de un control o una animación enviará un mensaje a este thread que será el responsable de dibujar esa petición, lo que hace que se mejore sensiblemente el tiempo de respuesta de una aplicación WPF y además su rendimiento.
Cosas a decir de wpfdfx.dll, pues es una dll no administrada, osea completamente nativa y si nos fijamos en las importaciones que hace esta dll no encontramos ninguna referencia a d3d9.dll (DirectX), pero si encontramos referencias a GDI32.dll, Knerl32.dll, Winmm.dll (Windows Multimedia) y WindowsCodects.dll (Infraestructura de codecs de imagen de WPF). Pero si somos un poco curiosos y desemsamblamos al dll con IDA vemos que no hace referencia directamente al d3d9.dll pero si lo carga con LoadLibrary y después emplaza los métodos con GetProcAddress.
Espero que os guste !!
