none
Dllhost consume mucha CPU. RRS feed

  • Pregunta

  • Hola.

    En nuestra empresa tenemos un servidor Web con widows 2008 R2 (x64) que está mostrando un consumo elevado de CPU. En este servidor tenemos publicado nuestros aplicativos en el IIS.

    Cuando el servidor inicia por primera vez el consumo es bajo pero a medida que pasan los días este se va incrementando hasta usar toda la CPU y la única solución que tenemos hasta el momento es reiniciar el servidor. (cada 10 o 15 días nos toca reiniciar el servidor).

    Si ingresamos al Aministrador de tareas vemos que este consumo de CPU lo hace el dllhost.

    Usando la herramienta process Explorer encontramos que los subprocesos son msvcrt.dll!_endthreadex+0x29. .... y si vemos el tiempo que llevan arriba nos muestra que algunos estan corriedo desde que se inició el equipo.

    veo que cada vez más aumenta el número de subprocesos corriendo en dllhost. Hoy son 44 y ayer en la noche eran 17.

     

    esta e sla información del stack de uno de esos hilos.

    ntoskrnl.exe!SeAccessCheckWithHint+0xb4a
    ntoskrnl.exe!KeAcquireSpinLockAtDpcLevel+0x7d2
    ntoskrnl.exe!KeWaitForSingleObject+0x19f
    ntoskrnl.exe!PsIsSystemProcess+0x94
    ntoskrnl.exe!KeStackAttachProcess+0x11c1
    ntoskrnl.exe!KiCheckForKernelApcDelivery+0x25
    ntoskrnl.exe!ExReleaseResourceAndLeavePriorityRegion+0x4b
    win32k.sys!EngRestoreFloatingPointState+0xce3f
    ntoskrnl.exe!HalPrivateDispatchTable+0x1160
    wow64win.dll+0x3fbda
    wow64win.dll+0x1ab53
    wow64.dll!Wow64SystemServiceEx+0xd7
    wow64cpu.dll!TurboDispatchJumpAddressEnd+0x24
    wow64.dll!Wow64SystemServiceEx+0x1ce
    wow64.dll!Wow64LdrpInitialize+0x429
    ntdll.dll!LdrGetProcedureAddress+0x240a7
    ntdll.dll!LdrInitializeThunk+0xe
    USER32.dll!PeekMessageW+0x17b
    USER32.dll!PeekMessageW+0x197
    ole32.dll!ObjectStublessClient12+0x70
    ole32.dll!ObjectStublessClient12+0x429
    ole32.dll!ObjectStublessClient12+0x1c6
    ole32.dll!ObjectStublessClient12+0x270
    ole32.dll!CreateStreamOnHGlobal+0x1211
    ole32.dll!WdtpInterfacePointer_UserUnmarshal+0xedd
    ole32.dll!WdtpInterfacePointer_UserUnmarshal+0xe12
    ole32.dll!WdtpInterfacePointer_UserUnmarshal+0xc6a
    ole32.dll!CreateStreamOnHGlobal+0x125a
    ole32.dll!CoGetTreatAsClass+0x26e1
    ole32.dll!CoGetTreatAsClass+0x264a
    ole32.dll!WdtpInterfacePointer_UserUnmarshal+0xb80
    RPCRT4.dll!NdrPointerFree+0x16a
    ole32.dll!WdtpInterfacePointer_UserUnmarshal+0x60d
    ole32.dll!CoGetTreatAsClass+0x23f6
    ASPDB2009-PRO.DLL!DllCanUnloadNow+0x3c576
    ASPDB2009-PRO.DLL!DllCanUnloadNow+0x471a2
    ASPDB2009-PRO.DLL!DllCanUnloadNow+0x5a498
    ASPDB2009-PRO.DLL!DllCanUnloadNow+0x230ce
    MSVBVM60.DLL!__vbaAptOffset+0x68b
    RPCRT4.dll!NdrCorrelationFree+0x3d

     

    puede alguien ayudarme o darme una pista de como puedo detectar que es lo que lo está causando.

    Gracias


    viernes, 3 de junio de 2011 11:59

Todas las respuestas

  • Esta complicado, pero hago un intento.

    Ese es el stack cuando esta la CPU al 100% ?

    En dllhost.exe se cargan componentes que corren en com+ ... parece que hay un componente que utiliza el componente ASPDB-2009, podrias extender la consulta al soporte del componente: http://www.aspdb.com/

    Puede ser que se componente tenga un limite de cola de 4 conexiones simultaneas configurado ?

    En que esta desarrollado el componente de com+ .. .vb6 o .net ?

    Si killeas el dllhost.exe el efecto es el mismo que reiniciar el servidor o no se recuelve el consumo de cpu ?

    Estas preguntas pueden ayuda a entontrar el problema.

     

     

    Saludos!

     

     

     

    lunes, 6 de junio de 2011 18:26
  • Hola Pablo,

    Te agradezco mucho que respondieras a mis inquietudes, ya pensaba que no me iban a ayudar. Voy a responder a tus preguntas lo mejor que puedo y si tienes más no dudes en hacérmelas.

    Muchas gracias.

    Ese es el stack cuando esta la CPU al 100% ?

    Yo he identificado que hay como 4 o 5 hilos corriendo, ese es el stack de 1 de ellos. Como ayer mate el dllhost no puedo ver en estos momento el stack de los otros procesos, toca esperar esta semana a que vuelva a incrementarse el consumo de CPU.

    Por el momento ya veo que hay un hilo "pegado" y en el stack tabien aparece el ASPDB2009-PRO.

    Puede ser que se componente tenga un límite de cola de 4 conexiones simultaneas configurado ?

    En la página del fabricante no veo donde se pueda configurar esto, no se si vos sabes si por la parte de componentes de windows se puede. Confieso que no se mucho sobre este tema de los componentes y sus configuraciones.

    En que esta desarrollado el componente de com+ .. .vb6 o .net ?

    En la página del fabricante no veo en que fue desarrollado exactamente pero creo que  creo con vb6

    Si killeas el dllhost.exe el efecto es el mismo que reiniciar el servidor o no se resuelve el consumo de cpu ?

    Si cuando killeo el dllhost.exe se baja la CPU es el mismo efecto que reiniciar el servidor.

     

    miércoles, 8 de junio de 2011 14:30
  • Bien, anda corrigiendome si me equivoco en algo.

    Tenes un sitio, que utiliza el componente ASPDB-PRO.

    Por lo que se ve en el stack, este componente corre dentro de COM+ con la Act ivacion configurada en "Server A pplication".

    Este componente esta escrito en VB6.

    Confirmame esto ingresando en Component Services.

    El problema esta en el desarrollo del componente o la forma en que lo utiliza el website .. asi que te recomendaria que lo veas con el fabricante del componente.

    Temporalmente como para safar, revisaria las opciones de Pooling y Recycling,  como para configurarle un reciclado  mas frecuente.

     

    Tambien tomaria en cuenta que tenes cuatro llamadas a DllCanUnloadNow ... que me resulta sospechoso que se quede ejecutando esa funcion, tal vez este por ahi el problema . . .pero son conjeturas.

     

    Saludos!

     

     

    • Propuesto como respuesta Pablo A. Allois miércoles, 8 de junio de 2011 18:09
    • Votado como útil Pablo A. Allois miércoles, 8 de junio de 2011 20:06
    miércoles, 8 de junio de 2011 18:09
  • Hola,

     

    Si está configurado como "Server Aplication".

    Te cuento que este componente lo usamos desde hace mucho tiempo y anteriormente lo teniamos corriendo en una maquina con w2003 32bits.

    Resulta que adquirimos un nuevo servidor con w2008 R2 64bits y pasamos el componente y la página que ya corria en el otro servidor al nuevo.

    A partir del momento en que nos migramos  fue que surgió el problema.

    Desafortunadamente el fabricante ya no da soporte sobre este componente.

    miércoles, 8 de junio de 2011 18:58
  • Se me ocurren algunas opciones:

     - Si tenes el 2003 prendido, fijate si en el com+ no tenia alguna opcion de configuracion diferente.

     - Probar de reciclar una vez al dia el componente, o probar de aumentar las instancias del componente.

     - Buscar si en la aplicacion web no hay alguna query que nunca termine de ejecutarse.

     

    Si no te sirve ninguna opcion, te diria que pruebes de postearlo en algun foro mas orientado a "Component Services".

     

    Saludos!

    miércoles, 8 de junio de 2011 20:06