Query di monitoraggio WQL comuni


12

Quali query WQL useresti per monitorare i tipici colli di bottiglia di Windows? Quale useresti per ottenere dati simili a "top" o "netstat"? A quale intervallo vorresti effettuare il polling?

Eccone alcuni che trovo utili.

SELECT PercentDiskTime, AvgDiskQueueLength, DiskReadBytesPerSec, DiskWriteBytesPerSec FROM Win32_PerfFormattedData_PerfDisk_PhysicalDisk

SELECT Caption, CommittedBytes, AvailableBytes, PercentCommittedBytesInUse, PagesPerSec, PageFaultsPerSec FROM Win32_PerfFormattedData_PerfOS_Memory

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor

SELECT Caption, WorkingSet, PageFaultsPerSec,IOReadBytesPerSec, IOWriteBytesPerSec, ThreadCount, HandleCount FROM Win32_PerfFormattedData_PerfProc_Process

SELECT Caption, BytesReceivedPerSec, BytesSentPerSec FROM Win32_PerfFormattedData_Tcpip_NetworkInterface

Roba eccellente, questo è utile anche per i programmatori di applicazioni. Gran parte di questo materiale non è disponibile direttamente tramite alcuna chiamata API Win32; WMI è utile ma non discusso quanto dovrebbe essere!
Andon M. Coleman,

Risposte:


7

Questa è davvero una bella domanda , ed è un peccato che non abbia ottenuto più amore!

La mia teoria di base dell'analisi del collo di bottiglia è quella di trattare il sistema come una scatola con 4 tipi di risorse finite: processore, memoria, disco e rete . Quindi voglio ottenere i numeri di base per ognuno di questi per determinare la salute della scatola. Voglio numeri facili da interpretare: il valore alto è negativo, il valore basso è positivo. 0 è il migliore, anche se mai perfettamente realizzabile (dopo tutto abbiamo comprato il computer per fare il lavoro , eh?). Quando vedo quale delle quattro risorse è il principale collo di bottiglia, posso procedere a determinare quale programma o processo sta consumando tutte le risorse e prendere una decisione consapevole se devo aumentare quella risorsa - o ottimizzare il programma / processo da usare meno della risorsa.

Formatterò i principali contatori delle prestazioni che utilizzo, da questo articolo , come query WMIC, perché non sono richiesti script (sebbene sia certamente possibile!). Puoi inserire ognuna di queste query direttamente nella console cmd:

wmic path Win32_PerfFormattedData_PerfOS_System get ProcessorQueueLength

Sopra è la lunghezza della coda del processore . Questo indica quanti thread sono in attesa in coda per essere gestiti dalla CPU. Numeri alti cattivi, numeri bassi buoni. Generalmente considero un valore <10 un sistema sano.

wmic path Win32_PerfFormattedData_PerfOS_Memory get PagesInputPerSec

Sopra è Memoria, Pagine immesse al secondo , la velocità con cui le pagine vengono lette dal disco per risolvere errori di pagina. Gli errori di pagina effettiva si verificano quando un processo fa riferimento a una pagina nella memoria virtuale che non si trova nella memoria fisica e deve essere recuperata dal disco. Questo contatore funziona meglio nella vista del grafico di Perfmon, però. Su un computer sano (senza colli di bottiglia), vedrai picchi occasionali man mano che i dati vengono letti dal disco nella RAM, più picchi si vedono e più aumentano, più memoria è limitata dal sistema. Se il sistema rimane spesso a un valore diverso da zero per periodi più lunghi, diciamo, di cinque secondi, probabilmente hai un sistema a collo di bottiglia della memoria.

wmic path Win32_PerfFormattedData_PerfDisk_PhysicalDisk get AvgDiskQueueLength, name

Sopra è PhysicalDisk, la lunghezza media della coda del disco . Ritengo che questo sia l'indicatore chiave dell'integrità del sistema, poiché anche i colli di bottiglia della memoria impantaneranno il disco a causa dell'eccessivo scambio di file di paging e spesso aumenteranno anche l'utilizzo della CPU. Mostrerà un elemento per ciascun disco montato e un totale di tutti i dischi. Un singolo disco ben funzionante avrà questo valore a 2 o inferiore. Per gli array, dividere il numero di mandrini per la lunghezza della coda (ad esempio: 4 mandrini nell'array divisi per una lunghezza della coda di 8 = 2, il che significa che l'array sta funzionando bene).

wmic path Win32_PerfFormattedData_Tcpip_NetworkInterface get OutputQueueLength, PacketsReceivedErrors, Name, currentbandwidth

E infine, sopra abbiamo prestazioni NIC. In particolare interfaccia di rete, lunghezza della coda di emissione ed errori di pacchetti ricevuti . Questi due contatori ci consentono di sapere quanti pacchetti sono in attesa di essere inviati e quanti pacchetti in entrata hanno causato errori che probabilmente hanno comportato ritrasmissioni. Vogliamo che entrambi i numeri rimangano a zero. In questa query ottengo anche la larghezza di banda corrente della NIC che è informazioni utili.

Una volta determinato quale risorsa viene utilizzata in modo eccessivo, di solito dipendo da Process Explorer o dall'oggetto processo di Perfmon per scoprire quale processo è il maiale delle risorse.


Grazie per la redazione dettagliata. Mi sono convertito in un wiki della comunità. Penso che un altro aspetto di questa domanda siano gli intervalli di polling. Alcuni colli di bottiglia appariranno solo brevemente, altri potrebbero essere campionati con meno frequenza.
Yancy,

Bene, il più delle volte si cercano colli di bottiglia in modo reattivo (perché sono stati osservati alcuni problemi) piuttosto che in modo proattivo (solo stare attenti in caso di colli di bottiglia). In entrambi i casi, tuttavia, i grafici perfmon anche in pochi minuti sono molto più utili delle istantanee point-in-time.
quux
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.