Web Farm Framework: WebAgentService.exe consume mucha memoria


Imaginemos este escenario, tenemos una Web Farm Framework 2.2 formada por:

· 2 Controllers: Windows 2008 R2

· 1 Primario: Windows 2008 R2

· Varios Secundarios: Windows 2008 R2

Poco a poco, el consumo de memoria en el WebFarmservice.exe está aumentando en los controllers y en algunos secundarios llegando hasta el punto de tener que reiniciar los servidores para solventarlo.

Para ver que ocurre, lo más fácil es revisar el comportamiento que estamos teniendo tal y como os conté en este post: http://blogs.msdn.com/b/desarrolloweb/archive/2012/05/06/asp-net-problemas-rendimiento.aspx

Pero en este caso veremos cómo el leak de memoria está en memoria nativa, por lo que necesitaríamos otro plan de acción

Día 1

--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal

Free                                    193      7ff`c6796000 (   7.999 Tb)           99.99%

.NET                                     144        0`1ac7a000 ( 428.477 Mb)  46.56%    0.01%

Heap                                      97        0`16921000 ( 361.129 Mb)  39.24%    0.00%

Image                                   763        0`069da000 ( 105.852 Mb)  11.50%    0.00%

Stack                                    80        0`01700000 (  23.000 Mb)   2.50%    0.00%

Other                                    13        0`001b6000 (   1.711 Mb)   0.19%    0.00%

TEB                                      23        0`0002e000 ( 184.000 kb)   0.02%    0.00%

PEB                                       1        0`00001000 (   4.000 kb)   0.00%    0.00%

 

Día 5

--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal

Free                                    200      7ff`91d80000 (   7.998 Tb)           99.98%

Heap                                    189        0`4b031000 (   1.172 Gb)  68.10%    0.01%

.NET                                     144        0`1ac7a000 ( 428.477 Mb)  24.31%    0.01%

Image                                   755        0`069da000 ( 105.852 Mb)   6.01%    0.00%

Stack                                    91        0`01a00000 (  26.000 Mb)   1.48%    0.00%

Other                                    13        0`001b6000 (   1.711 Mb)   0.10%    0.00%

TEB                                      26        0`00034000 ( 208.000 kb)   0.01%    0.00%

PEB                                       1        0`00001000 (   4.000 kb)   0.00%    0.00%

 

Por lo que en este caso podemos usar LeakTrace para saber quién está haciendo las alocaciones de memoria por ejemplo usando DebugDiag

 

image

 

Examinando los volcados podremos ver quién no está liberando la memoria que usa. Si vemos un escenario parecido a este:

msvcrt!malloc+70  

nativerd!operator new+23  

nativerd!SCHEMA_ELEMENT::Clone+3f

nativerd!SCHEMA_ELEMENT::CreateElementObject+8d3

nativerd!SCHEMA_ELEMENT::CreateElementObject+973

nativerd!SCHEMA_ENTRY::CreateConfigElement+c9

nativerd!CONFIG_SECTION::ParseConfigSetting+29e

nativerd!SECTION_GROUP_TABLE::ParseConfigSetting+2fa

nativerd!CONFIG_FILE::ParseLocation+2ba

nativerd!CONFIG_FILE::ParseTopLevelElements+493

nativerd!CONFIG_FILE::ParseDom+d9

nativerd!CONFIG_FILE::ParseConfigFile+247

nativerd!CONFIG_CACHE::ParseConfigFile+3e

nativerd!CONFIG_CACHE::CacheMiss+a699      

nativerd!CONFIG_CACHE::ProcessConfigPath+4b25      

nativerd!CONFIG_CACHE::GetConfigFileList+40

nativerd!CONFIG_SYSTEM::GetConfigSectionInternal+1f2

nativerd!CONFIG_SYSTEM::GetAdminSection+b5 

mscorwks!DoCLRToCOMCall+177

 

En este artículo podemos ver como versiones anteriores de nativerd puede provocar un memory leak al no liberar memoria. Aunque describe otro escenario, el comportamiento que describe es el mismo: http://support.microsoft.com/kb/2618982

Instalando el hotfix debería solucionarse el problema.

 

Espero que os sirva de ayuda.

- José Ortega Gutiérrez

Comments (0)

Skip to main content