Analisis de un problema y su solución.

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • jmtella
    Administrator
    • Nov
    • 20580

    Analisis de un problema y su solución.

    Me he encontrado en mas de un caso, (en portátiles) que cada 3 o 4 segundos la CPU tiene pico sin sentido hasta un 7%. Si no hay nada ejecutándose, ¿a qué y por qué existe ese comportamiento periódico de consumo?

    Además en las maquinas que esto sucede, algunas veces se reinician solas sin dump. Parecen problemas independientes pero veamos si ligazón.

    En ese caso, al no existir dump, lo único que puede verse es el fallo en:

    Spoiler: mostrar
    Haga clic en la imagen para ver una versión más grande

Nombre:	Capture1.PNG
Visitas:	87
Size:	48,5 KB
ID:	9991


    Haga clic en la imagen para ver una versión más grande

Nombre:	Capture2.PNG
Visitas:	80
Size:	29,1 KB
ID:	9992







    Esto nos da una pista. El services.exe se cae y provoca reinicio sin poder hacer un dump. Todos los servicios del sistema se caen. Evidentemente el services.exe arranca decenas de procesos y parece difícil ver algo.

    Arrancamos un process explorer y nos dedicamos a observar... vemos que curiosamente el consumo "periódico" que hemos citado antes sucede en dicho proceso.

    Spoiler: mostrar
    Haga clic en la imagen para ver una versión más grande

Nombre:	Capture.PNG
Visitas:	82
Size:	120,8 KB
ID:	9990







    Podemos comprobar que además justo en ese momento TODAS (o casi) las tareas que dependen de él, consumen un poco de CPU. Unos porcentajes ridículos, pero que sumandos dan ese 5% o 6% periódico que se observa.

    ¿por qué todos a la vez, y luego nada durante dos o tres segundos?.

    Y curiosamente, cuando esto sucede, el WmiPrvSE es el que mas consumo tiene. La idea que se me ocurrió es ¿no será precisamente este proceso el que bloquea el services.exe -como si pusiese un semáforo- y cuando se libera es cuando entran de repente los pendientes? Si esto es así. no será ese bloqueo el responsable de los reinicios de maquina?

    Curiosamente la respuesta es que si, ya que si reiniciamos dicho servicio no vuelve a suceder ninguno de los problemas, ni el consumo periódico de CPU ni los reinicios. Es como si el servicio Windows Management Instrumentation (que corresponde a WmiPrvSE) y que tiene mas de media docena de dependientes tiene algún problema en el establecimiento de los bloqueos o semáforos en el sistema. Se pueden ver los dependientes reiniciando el servicio (que informa de ellos) o bien mediante este comando de PowerShell:

    Código:
    get-service winmgmt -DependentServices
    La solución pasa entonces por parar y reiniciar dicho serivcio en cada arranque de maquina. Pero ¿podríamos mecanizarlo?. Por supuesto, por ejemplo mediante este script de powershell:

    Código:
    function reset_wmi
    {
        # guardar lista de dependencias y estado del wmiApsrv
        $dependencies = get-service winmgmt -DependentServices | Where-Object{ $_.Status -eq "Running" }
        $stwmiadapter = get-service wmiApsrv | Where-Object{ $_.Status -eq "Running" }
     
        # fuerza parada de servicios
        Stop-Service "Winmgmt" -force -ErrorAction Ignore
        Stop-Service "wmiApSrv" -force -ErrorAction Ignore
     
        # matar los procesos que continuen en ejecucion
        Get-Process "WmiPrvSE" | Stop-Process -Force -ErrorAction Ignore
        Get-Process "WmiApSrv" | Stop-Process -Force -ErrorAction Ignore
     
        # restart servicios
        Start-Service "Winmgmt"
        $stwmiadapter | Start-Service -ErrorAction Ignore
        $dependencies | Start-Service -ErrorAction Ignore
    }
     
    # registrar el Event Log si fuese necesario
     
    $es = "WMI Watchdog Script"
     
    if (!(Get-Eventlog -LogName "Application" -Source $es -ErrorAction Ignore ))
        { New-Eventlog -LogName "Application" -Source $es }
     
     
     
    Write-EventLog -LogName Application -source $es -EntryType Information -EventId 1 -Message "Reiniciando WMI servicios..."
     
    try
      {
       reset_wmi 2>&1 | Out-Null
       Write-EventLog -LogName Application -source $es -EntryType Information -EventId 2 -Message "WMI reset completado. Consulta WMI."
       gwmi -Class Win32_Service -ErrorAction Stop | Out-Null
      }
    catch
      {
       Write-EventLog -LogName Application -source $es -EntryType Error -EventId 101 -Message "WMI reset fallado: $($_.exception.message)"    
      }
    ¿os ha gustado?...
  • NostromoADF
    Senior Member
    • Dec
    • 596

    #2
    Entonces has solucionado el error, pero no has llegado al causante final del mismo. Yo también tengo algún error en el registro de eventos pero no "quitan" puntos en el registro de confiabilidad. Ahora acabo de mirar y tengo un NvStreamSvc Failed continue stopping. [6] , que es nuevo. Supongo que será cosa de la nueva versión de los controladores de Nvidia. También sale solo el ordenador de la suspensión, de vez en cuando sobre todo sino apago el ratón. Tendré que analizar que evento USB es el causante de que se encienda.

    Comentario

    • jmtella
      Administrator
      • Nov
      • 20580

      #3
      Originalmente publicado por NostromoADF Ver Mensaje
      Entonces has solucionado el error, pero no has llegado al causante final del mismo. Yo también tengo algún error en el registro de eventos pero no "quitan" puntos en el registro de confiabilidad. Ahora acabo de mirar y tengo un NvStreamSvc Failed continue stopping. [6] , que es nuevo. Supongo que será cosa de la nueva versión de los controladores de Nvidia. También sale solo el ordenador de la suspensión, de vez en cuando sobre todo sino apago el ratón. Tendré que analizar que evento USB es el causante de que se encienda.
      Creo que el error es del propio Windows...

      Comentario

      Trabajando...
      X