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.