lunedì 18 settembre 2023

PowerShell: Diagnostica delle prestazioni di avvio/spegnimento/standby/ripresa di Windows

Da Sistemista ci si trova spesso a dover analizzare problemi di prestazioni legati ai processi di avvio/arresto/ibernazione/ripresa di una workstation/Server. Microsoft fornisce una serie di registri eventi di sistema per diversi scopi che possono essere utili in tali analisi. Nel Visualizzatore eventi di Windows, questi registri si trovano in un ramo speciale chiamato "Registri applicazioni e servizi". Windows registra gli eventi di diagnostica delle prestazioni nel registro eventi Microsoft-Windows-Diagnostics-Performance/Operational. Per aprire questo registro in Visualizzatore eventi di Windows (eventvwr), espandere il ramo Registri applicazioni e servizi -> Microsoft -> Windows -> Diagnostics-Performance ->Operativo.
Visualizzatore eventi, Diagnostics-Performance
FIG 1 - Visualizzatore eventi, Diagnostics-Performance

Dal registro è possibile visualizzare un elenco di diversi eventi diagnostici. Come si può notare dalla FIG 1, gli eventi con lo stesso ID possono essere di tipi (livelli) diversi (Avviso, Errore e Critico) che dipendono dalla durata del processo di avvio/arresto. Questi eventi contengono internamente molti parametri importanti, ma non sono visibili nella descrizione dell'evento (anche il Visualizzatore eventi di Windows non li visualizza). L'unico modo per visualizzare questi parametri è fare doppio clic sull'evento per visualizzarne le proprietà, passare alla scheda  Dettagli e selezionare XML.
Proprietà evento, XML
FIG 2 - Proprietà evento, XML


Nella seguente tabella sono riportati le descrizioni degli Event ID.
Event ID Descrizione
Monitoraggio delle prestazioni di avvio
100
Avvio di Windows
101
L'avvio dell'applicazione ha richiesto più tempo del consueto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
102
L'inizializzazione del driver ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
103
L'avvio di questo servizio di avvio ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
104
L'inizializzazione del sistema Core ha richiesto più tempo, con conseguente riduzione delle prestazioni nel processo di avvio del sistema.
105
Le ottimizzazioni in primo piano (prefetching) hanno richiesto più tempo per essere completate, con un conseguente calo delle prestazioni nel processo di avvio del sistema.
106
Le ottimizzazioni in background (prefetching) hanno richiesto più tempo per essere completate, con conseguente riduzione delle prestazioni nel processo di avvio del sistema.
107
L'applicazione dei criteri computer ha causato un rallentamento nel processo di avvio del sistema
108
L'applicazione dei criteri utente ha causato un rallentamento nel processo di avvio del sistema
109
L'inizializzazione del dispositivo ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
110
L'inizializzazione della gestione delle sessioni ha causato il rallentamento del processo di avvio
Monitoraggio delle prestazioni di arresto del sistema
200
Arresto di Windows
201
Questa applicazione ha causato un ritardo nel processo di spegnimento del sistema.
202
Questo dispositivo ha causato un ritardo nel processo di spegnimento del sistema
203
Il servizio ha causato un rallentamento nel processo di arresto del sistema
Monitoraggio delle prestazioni in standby
300
Windows ha ripreso dallo standby
301
Questa applicazione ha causato un ritardo durante lo standby
302
Questo driver ha causato un ritardo durante lo standby durante la manutenzione di un dispositivo
303
Questo servizio ha causato un ritardo durante la sospensione ibrida
304
La creazione del file hiber è stata più lenta del previsto
305
La permanenza delle cache del disco è stata più lenta del previsto
306
La preparazione del sottosistema video per la sospensione è stata più lenta del previsto
307
La preparazione di Winlogon per la sospensione era più lenta del previsto
308
La preparazione della memoria di sistema per la sospensione è stata più lenta del previsto
309
La preparazione del sistema principale per la sospensione è stata più lenta del previsto
310
La preparazione dei thread di lavoro del sistema per la sospensione è stata più lenta del previsto
350
Il tempo di inizializzazione del BIOS è stato superiore a 250 ms (requisito del logo) durante il ripristino del sistema
351
Questo driver ha risposto più lentamente del previsto alla richiesta di ripristino durante la manutenzione di questo dispositivo
352
La lettura del file hiber è stata più lenta del previsto
Monitoraggio delle prestazioni del sistema
400
Informazioni sull'evento di monitoraggio delle prestazioni del sistema
401
Questo processo utilizza il tempo del processore e influisce sulle prestazioni di Windows
402
Questo processo sta eseguendo attività eccessive del disco e ha un impatto sulle prestazioni di Windows
403
Questo driver utilizza troppe risorse e influisce sulle prestazioni di Windows
404
Questo driver attende più del previsto su un dispositivo
405
Questo file è frammentato e influisce sulle prestazioni di Windows
406
L'I/O del disco su questo file sta richiedendo più tempo del previsto
407
Questo processo utilizza troppa memoria di sistema
408
Molti processi utilizzano troppa memoria di sistema
Monitoraggio delle prestazioni del sistema
500
Il Desktop Window Manager sta riscontrando un forte conflitto di risorse
501
Il Desktop Window Manager sta riscontrando un forte conflitto di risorse


Dovendo effettuare l'analisi sulle prestazioni di avvio/spegnimento/standby/ripresa, dovremmo prestare attenzione agli eventi 1xx, 2xx e 3xx. Come visibile in tabella e in FIG 1, gli eventi 100, 200 e 300 sono eventi di base seguiti da 1xx, 2xx e 3xx che forniscono informazioni aggiuntive sul problema.

Supponiamo di voler individuare l'applicazione che rallenta l'avvio di Windows. Windows registra l'ora di avvio e i tempi di riduzione prestazioni (in millisecondi) per ogni servizio e sottosistema avviato. Grazie a questi dati, è possibile identificare potenziali problemi con i servizi che richiedono troppo tempo per essere avviati. In questo caso l'Event ID che ci interessa è il 101 e i livelli Critico/Errore (livelli 1 e 2).

PowerShell può esserci d'aiuto in tali contesti. Tramite questo semplice script, da eseguire come amministratore, vengono evidenziati tutti gli eventi con Event ID 101 e di livello 1 e 2 degli ultimi 60 giorni.
 $Days = 60  
   
 $machineName = @{  
   Name = 'Nome PC'  
   Expression = { $env:COMPUTERNAME }  
 }  
   
 $FileName = @{  
     Name = 'Nome File';  
     Expression = { $_.properties[2].value }  
 }  
   
 $Name = @{  
     Name = 'Nome';  
     Expression = { $_.properties[4].value }  
 }  
   
 $Version = @{  
     Name = 'Versione'  
     Expression = { $_.properties[6].value }  
 }  
   
 $TotalTime = @{  
     Name = 'Tempo Totale'  
     Expression = { $_.properties[7].value }  
 }  
   
 $DegradationTime = @{  
     Name = 'Tempo riduzione prestazioni'  
     Expression = { $_.properties[8].value }  
 }  
   
 Get-WinEvent -FilterHashtable @{  
   LogName='Microsoft-Windows-Diagnostics-Performance/Operational'  
   Id=101  
   StartTime = (Get-Date).AddDays(-$Days)  
   Level = 1,2  
 } |  
 Select-Object -Property $MachineName, TimeCreated, $FileName, $Name, $Version, $TotalTime, $DegradationTime, Message | Out-GridView  

Script PowerShell, Get-WinEvent
FIG 3 - Script PowerShell, Get-WinEvent







Nessun commento:

Posta un commento

I messaggi sono soggetti a moderazione da parte dell'amministratore prima della loro pubblicazione.