Come posso identificare il colpevole del mio lento arresto di Windows?


30

Il mio computer impiega molto tempo a spegnersi.

Come posso identificare il colpevole? Non voglio aspettare minuti affinché il mio computer si spenga ...

Esiste un programma che posso usare per tenere traccia del tempo necessario per lo spegnimento?


1
Non abbiamo idea di come sia configurato il tuo sistema e cosa potrebbe essere in esecuzione in background
casuale

1
OK ... Ho visto qualcun altro lo ha chiesto, poi l'ho cancellato mentre stavo componendo una risposta molto lunga e completa ... (mi sono sentito un po 'dispiaciuto per me stesso)
wizlog

Puoi sempre suggerirlo per il blog
casuale

2
Tenere premuto il pulsante di accensione per alcuni secondi.
Daniel R Hicks,

5
Questa domanda è valida, posso rispondere obiettivamente a questo in modo che il suo problema sia risolto. Non c'è nulla di ambiguo (il problema è che il tempo di spegnimento è troppo lungo), vago (vuole accelerare il suo spegnimento), incompleto (i dettagli non sono necessari, ovviamente ogni computer è diverso ma ciò non rende la tecnica identificare il colpevole in modo diverso), eccessivamente ampio (si potrebbe pensare così, ma non vedo altre domande sulla risoluzione dei problemi di arresto, quindi questa è una domanda davvero preziosa da avere; penso che sarebbe ampio se volesse accelerare altre cose ) o retorico (coinvolge xperf).
Tamara Wijsman,

Risposte:


31

Windows fornisce contatori delle prestazioni e Event Tracing che consente alle applicazioni di eseguire analisi delle prestazioni in modo da poter individuare la causa dei problemi di prestazioni, tra quelle esistenti esiste un eccezionale toolkit: Windows Performance Toolkit disponibile in Windows SDK .

In questo toolkit troverai xbootmgr.exe, pensato per l' analisi delle prestazioni della transizione On / Off di Windows .

Sebbene il documento collegato sopra xbootmgrincluda tutti i dettagli per ogni transizione on / off, ecco l'idea generale di tracciare e analizzare la transizione di spegnimento usando e la GUI di xperf:

  1. Scarica Windows SDK, quindi installa Windows Performance Toolkit utilizzandolo.

  2. Apri un prompt dei comandi come amministratore, quindi esegui:

    cd %ProgramFiles%\Microsoft Windows Performance Toolkit

  3. Se si desidera aiuto in futuro, è possibile digitare xbootmgr -helpcosì come xperf /?.

  4. Esegui una traccia di riavvio in questo modo:

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

  5. Dopo l'avvio, genererà una traccia entro due minuti.

  6. La traccia è stata salvata %ProgramFiles%\Microsoft Windows Performance Toolkit, è possibile trascinarla su xperf.exee verrà aperta in una GUI.

  7. Vedrai una GUI con diversi grafici, la freccia sul lato sinistro ti consente di aggiungere / rimuovere grafici.

  8. Guarda i grafici e vedi se riesci a identificare qualcosa fuori dall'ordinario, puoi selezionare un intervallo e ingrandirlo se lo desideri. Fai clic con il tasto destro e annulla se vuoi vedere il tutto.

  9. Per ciascun grafico, è possibile fare clic con il pulsante destro del mouse per ottenere le tabelle di riepilogo per l'intervallo attualmente selezionato .

  10. In queste tabelle, ordina in base al peso o al tempo per capire a cosa sta spendendo di più. Si noti che è possibile trascinare tra le colonne, quindi ad esempio la tabella I / O consente di verificare il processo di utilizzo più elevato e il percorso di utilizzo più elevato.

    Il divisore (una colonna di intestazione gialla) fa in modo che le colonne a destra mostrino il totale delle colonne a sinistra. Quindi, se prima hai Path e poi Process, allora puoi aprire l'albero per un file per vedere a quali processi ha avuto accesso e quindi ottenere i totali per quella combinazione processo / file.

  11. Puoi trovare ulteriori informazioni su come funzionano i grafici e le tabelle qui .

  12. Se in qualche modo hai bisogno di scendere per guardare le tracce dello stack; eseguire un'altra traccia di avvio e aggiungere il -stackWalk profileparametro, impostare _NT_SYMBOL_PATH e fare clic con il tasto destro su un grafico e abilitare "Carica simboli". Ciò ti consentirà di verificare quali funzioni sta effettivamente chiamando, in generale non ti servirà comunque per un arresto; ma può consentire cose come scoprire che il tuo firewall sta interferendo con il tuo debugger come programmatore. Abbastanza elegante ...

Buona fortuna, spero che tu possa trovare il colpevole. Altrimenti rilascia la traccia e ti daremo un'occhiata ...

Si noti che i DPC sono chiamate di procedura differite e gli interrupt sono interruzioni del software , entrambe correlate a driver / hardware.


1
Incredibile risposta utile. Eventuali tutorial su ETW sono straordinariamente utili; è un'area di Windows senza documentazione e nessuna guida da guidare.
Ian Boyd,

@Tom Wijsman I link devono essere aggiornati
Moab

Ora fa parte del kit di valutazione e distribuzione di Windows, è possibile trovare un collegamento, ad esempio all'indirizzo msdn.microsoft.com/en-us/windows/hardware/commercialize/test/… o semplicemente cercando "Windows ADK". Durante l'installazione, è possibile selezionare solo Performance Toolkit.
Andreas Reiff,

Ora fa anche parte ..., perché è ancora disponibile nell'SDK.
Tamara Wijsman,

22

I miei arresti hanno richiesto molto tempo per essere eseguiti. Quello che segue è il mio esempio con la risposta di Tom .

Il primo grafico mostra il problema, I / O del disco :

inserisci qui la descrizione dell'immagine

Il mio arresto sta impiegando più di un minuto ed è tutto I / O del disco rigido.

Il grafico successivo, Utilizzo del disco mostra che un'unità è quasi al massimo al 100% di utilizzo:

inserisci qui la descrizione dell'immagine

Il grafico finale mostra l' utilizzo del disco per processo :

inserisci qui la descrizione dell'immagine

Filtrando mi rendo conto che è tutto causato da WinInit.exe:

inserisci qui la descrizione dell'immagine

Facendo clic con il pulsante destro del mouse su uno dei grafici del disco rigido e selezionando Tabella riepilogativa , posso ottenere i dettagli di quali file sono stati accessibili da quale processo:

inserisci qui la descrizione dell'immagine

56,4 secondi del mio arresto sono stati spesi WinInitscrivendo 6,7 GB su C:\hiberfil.sys.


Ma la domanda è: perché Windows sta scrivendo sul mio file di ibernazione allo spegnimento ?

Poi ho ricordato un'opzione che avevo attivato per cancellare quel file di paging all'arresto:

  • Avvia -> Esegui -> SecPol.msc
    • Impostazioni di sicurezza, politiche locali, opzioni di sicurezza
    • Arresto: cancella il file di paging della memoria virtuale

inserisci qui la descrizione dell'immagine

Quindi ho disabilitato l'opzione ed eseguito di xbootmgrnuovo. Ora il mio spegnimento è di 22 secondi:

inserisci qui la descrizione dell'immagine

Ora 9slo 22sspegnimento viene speso Systemscrivendo in qualche unknownfile. Questo potrebbe essere degno di ulteriori indagini.

Ma per ora ho risolto il mio arresto di un minuto e mezzo.


sono andato oltre e ho risolto il mio spegnimento lento dei 22 anni. Da t = 12sa t = ha 21smostrato l' utilizzo del disco al 100% , ma zero I / O del disco . Era sconcertante.

Fino a quando, durante uno spegnimento, ho sentito il suono familiare di una delle mie unità girare. L'arresto è stato bloccato per 9 secondi perché Windows stava tentando di accedere a un disco che era andato in sospensione. Nove secondi dopo l'unità risponde e un momento dopo la macchina si è spenta.

È ironico che Windows riattivi un disco per dirgli che è ora di andare a dormire.

Ciò renderebbe il mio arresto effettivo 13,5 secondi. Potrebbe valere la pena indagare di più. Ma per ora ho risolto il mio arresto di 22 secondi.


1
+1 Sono contento di averlo risolto nel tuo caso e bel post!
Tamara Wijsman,

1
Queste risposte meritano un post sul blog, non credi? ;)
Ivo Flipse
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.