Como posso identificar o culpado do meu desligamento lento do Windows?

30

Meu computador está demorando muito tempo para desligar.

Como posso identificar o culpado? Não quero esperar minutos para o meu computador desligar ...

Existe um programa que eu possa usar para rastrear quanto tempo leva para desligar?

wizlog
fonte
1
Não temos idéia de como seu sistema está configurado e o que pode estar em execução em segundo plano
aleatoriamente
1
OK ... Eu vi alguém perguntou, então excluí-la como eu estava compondo uma resposta muito longa e completa ... (senti meio que triste para mim)
wizlog
Você sempre pode sugerir isso para o blog
random
2
Mantenha pressionado o botão liga / desliga por alguns segundos.
Daniel R Hicks
5
Esta pergunta é válida, posso objetivamente responder a isso para que o problema seja resolvido. Não há nada ambíguo (o problema é que o tempo de desligamento leva muito tempo), vago (ele quer acelerar o desligamento), incompleto (os detalhes não são necessários, é claro que cada computador é diferente, mas isso não faz a técnica para identificar o culpado de maneira diferente), excessivamente amplo (você pode pensar assim, mas não vejo nenhuma outra pergunta para solucionar o desligamento, portanto, essa é uma pergunta realmente valiosa ; acho que seria ampla se ele quiser acelerar outras coisas ) ou retórica (envolve xperf).
Tamara Wijsman 16/10

Respostas:

31

O Windows fornece contadores de desempenho , bem como rastreamento de eventos, que permite que os aplicativos analisem o desempenho, para que se possa identificar a causa dos problemas de desempenho. Entre os que existem, existe um excelente kit de ferramentas: o Windows Performance Toolkit disponível no Windows SDK .

Neste kit de ferramentas você encontrará xbootmgr.exe, destinado à Análise de Desempenho de Transição On / Off do Windows .

Embora o documento vinculado acima entre em todos os detalhes de cada transição liga / desliga, aqui está a idéia geral sobre como rastrear e analisar a transição de desligamento usando xbootmgre a GUI do xperf:

  1. Baixe o Windows SDK e instale o Windows Performance Toolkit usando-o.

  2. Abra um prompt de comando como administrador e execute:

    cd %ProgramFiles%\Microsoft Windows Performance Toolkit

  3. Se você quiser ajuda no futuro, poderá digitar xbootmgr -helptambém xperf /?.

  4. Faça um rastreamento de reinicialização como este:

    xbootmgr -trace shutdown -traceFlags BASE+DIAG+LATENCY -noPrepReboot

  5. Após a inicialização, ele gerará um rastreio em dois minutos.

  6. O rastreio foi salvo %ProgramFiles%\Microsoft Windows Performance Toolkit, você pode arrastá-lo xperf.exee será aberto em uma GUI.

  7. Você verá uma GUI com gráficos diferentes. A seta no lado esquerdo permite adicionar / remover gráficos.

  8. Olhe para os gráficos e veja se você consegue identificar algo fora do comum, pode selecionar um intervalo e aumentar o zoom, se quiser. Clique com o botão direito e descompacte quando quiser ver o todo.

  9. Para cada gráfico, você pode clicar com o botão direito do mouse para obter tabelas de resumo para o intervalo atualmente selecionado .

  10. Nestas tabelas, classifique por peso ou tempo para descobrir para o qual está gastando mais. Observe que você pode arrastar as colunas; portanto, a tabela de E / S permite verificar o processo de uso mais alto e o caminho de uso mais alto.

    O divisor (uma coluna de cabeçalho amarela) faz com que as colunas à direita mostrem o total das colunas restantes. Portanto, se você tiver o Path primeiro e depois o Process, poderá abrir a árvore de um arquivo para ver quais processos o acessaram e obter os totais dessa combinação de processo / arquivo.

  11. Você pode encontrar mais informações sobre como os gráficos e tabelas funcionam aqui .

  12. Se você precisar, de alguma forma, descer para examinar os rastreamentos da pilha; faça outro rastreio de inicialização e inclua o -stackWalk profileparâmetro, defina _NT_SYMBOL_PATH e clique com o botão direito do mouse em qualquer gráfico e ative "Load Symbols". Isso permitirá que você verifique quais funções estão realmente chamando; em geral, você não precisará disso para um desligamento; mas pode permitir coisas como descobrir que seu firewall está interferindo no seu depurador como programador. Muito bacana ...

Boa sorte, espero que você possa encontrar o culpado. Caso contrário, abandone o rastreamento e daremos uma olhada em você ...

Observe que os DPCs são chamadas de procedimento adiado e interrupções são interrupções de software , ambas relacionadas a drivers / hardware.

Tamara Wijsman
fonte
1
Resposta útil incrível. Qualquer tutorial sobre ETW é extraordinariamente útil; é uma área do Windows sem documentação e sem gui.
Ian Boyd
@Tom Wijsman Os links precisam ser atualizados
Moab
Agora faz parte do Kit de Avaliação e Implantação do Windows, um Link pode ser encontrado, por exemplo, em msdn.microsoft.com/en-us/windows/hardware/commercialize/test/… ou simplesmente pesquisando "Windows ADK". Durante a instalação, é possível apenas selecionar o Performance Toolkit.
Andreas Reiff
Agora também faz parte ..., porque ainda está disponível no SDK.
Tamara Wijsman
22

Meus desligamentos demoravam muito tempo a correr. O que se segue é o meu exemplo com a resposta de Tom .

O primeiro gráfico mostra o problema, Disk I / O :

insira a descrição da imagem aqui

Meu desligamento está demorando mais de um minuto e é tudo E / S do disco rígido.

O próximo gráfico, Utilização de disco , mostra que uma unidade está quase no máximo com 100% de uso:

insira a descrição da imagem aqui

O gráfico final mostra a utilização do disco por processo :

insira a descrição da imagem aqui

Filtrando para baixo, percebo que tudo é causado por WinInit.exe:

insira a descrição da imagem aqui

Ao clicar com o botão direito do mouse em qualquer um dos gráficos do disco rígido e selecionar Tabela de resumo , posso obter os detalhes de quais arquivos foram acessados ​​por qual processo:

insira a descrição da imagem aqui

56,4 segundos do meu desligamento foram gastos WinInitescrevendo 6,7 GB para C:\hiberfil.sys.


Mas a pergunta é por que o Windows está gravando no meu arquivo de hibernação no desligamento ?

Lembrei-me de uma opção que havia ativado para limpar esse arquivo de paginação no desligamento:

  • Iniciar -> Executar -> SecPol.msc
    • Configurações de segurança, diretivas locais, opções de segurança
    • Encerramento: Limpar arquivo de paginação de memória virtual

insira a descrição da imagem aqui

Desativei a opção e execute xbootmgrnovamente. Agora meu desligamento é de 22 segundos:

insira a descrição da imagem aqui

Agora, 9so 22sdesligamento é gasto Systemgravando em algum unknownarquivo. Isso pode ser digno de mais investigação.

Mas por enquanto resolvi meu minuto e meio de desligamento.


fui mais longe e resolvi meu desligamento lento de 22 anos. De t = 12saté t = 21smostrou 100% de utilização de disco , mas zero de E / S de disco . Foi desconcertante.

Até que durante um desligamento ouvi o som familiar de uma das minhas unidades girando. O desligamento foi interrompido por 9 segundos porque o Windows estava tentando acessar um disco que havia adormecido. Nove segundos depois, a unidade responde e um momento depois a máquina foi desligada.

Irônico que o Windows ative um disco para dizer que é hora de dormir.

Isso tornaria meu desligamento real em 13,5 segundos. Isso pode valer mais investigação. Mas, por enquanto, resolvi meu desligamento de 22 segundos.

Ian Boyd
fonte
1
+1 Fico feliz que você tenha resolvido no seu caso, e bom post!
Tamara Wijsman
1
Essas respostas merecem uma postagem no blog, você não acha? ;)
Ivo Flipse