Raccolta di dati sulle prestazioni
Dopo aver creato una query e aggiunto contatori, chiamare la funzione PdhCollectQueryData per recuperare i dati non elaborati correnti per tutti i contatori della query.
Molti contatori, ad esempio i contatori di frequenza, richiedono due campioni di dati per calcolare un valore di dati formattato. PDH mantiene i dati per l'esempio corrente e l'esempio raccolto in precedenza. La procedura seguente descrive come raccogliere i valori dei contatori che richiedono due campioni per calcolare un valore visualizzabile.
Per raccogliere i valori dei contatori che richiedono due campioni per calcolare un valore visualizzabile
- Chiamare PdhCollectQueryData per raccogliere il primo esempio.
- Chiamare la funzione Sleep per attendere almeno un secondo tra le raccolte.
- Chiamare di nuovo PdhCollectQueryData per raccogliere il secondo esempio.
- Chiamare la funzione PdhGetFormattedCounterValue per calcolare un valore visualizzabile.
- Ripetere i passaggi da 2 a 4.
In alternativa all'implementazione di un periodo di attesa manualmente, è possibile chiamare la funzione PdhCollectQueryDataEx , che crea un thread di intervallo che attende un periodo di tempo specificato, raccoglie l'esempio e quindi attiva un evento definito dall'applicazione.
Se si desidera eseguire query sui dati sulle prestazioni da un file di log, è anche possibile definire un intervallo di tempo. L'intervallo di tempo limita la query a quelli raccolti entro l'intervallo di tempo (ogni campione contiene un timestamp per il momento in cui è stato raccolto). Per altre informazioni su come impostare e recuperare intervalli di tempo, vedere Impostazione di un intervallo di tempo per una query.
Se si desidera raccogliere dati sulle prestazioni e scriverli in un file di log, chiamare la funzione PdhUpdateLog anziché chiamare PdhCollectQueryData. Per informazioni dettagliate, vedere Uso dei file di log e scrittura di dati sulle prestazioni in un file di log.
Per informazioni dettagliate sul calcolo di un valore di esempio visualizzabile, vedere Visualizzazione dei dati sulle prestazioni.
Informazioni sui contatori di più processori
Alcuni contatori delle prestazioni sono stati progettati per sistemi a processore singolo e potrebbero non essere accurati per i computer multiprocessore. Ad esempio, un processo è limitato al 100% di un singolo processore; Tuttavia, i thread possono usare diversi processori, in totale oltre il 100%.
Il valore del contatore "\Processor(_Total)\% Processor Time" è l'utilizzo medio di tutti i processori. Ad esempio, se si dispone di due processori, uno al 100% e un altro al 0%, questo contatore segnala il 50%. Quindi l'intervallo è compreso tra 0 e 100.
Il valore del contatore "\Process(X)\% Processor Time" (dove X è il nome del processo), il valore del contatore è la somma dell'utilizzo del processore da parte di tutti i thread del processo X. Ad esempio, in un computer con due processori, se un processo ha due thread, uno che occupa il 75% di una CPU e l'altro richiede l'80% di un'altra CPU, questo contatore segnala il 155%. L'intervallo per questo contatore è compreso tra 0 e 100 * ProcessorCount.
Quando si usa il Process
contatore, è possibile ricevere valori non compresi nell'intervallo previsto di valori per l'utilizzo della CPU. Per calcolare la percentuale di utilizzo della CPU, PDH richiede due campioni (ognuno con un valore non elaborato e un timestamp). Poiché PDH usa solo il nome dell'istanza per trovare le corrispondenze con i processi, a volte può combinare campioni di processi diversi. Ad esempio, se vengono campionati tre processi con lo stesso nome di istanza e uno dei processi viene terminato dopo il terzo esempio, un altro processo verrà spostato nello slot liberato da tale processo terminato. Di conseguenza, un contatore formattato fornirà un valore non corretto quando si formatta il quarto esempio perché usa il terzo campione del processo terminato e il quarto campione del processo spostato nello slot del processo terminato.
La tabella seguente illustra come può verificarsi se un processo viene terminato durante la raccolta dei dati. La tabella mostra cinque esempi di valori del contatore per tre istanze del processo X. I campioni vengono raccolti in un secondo intervallo. Dopo la raccolta del terzo campione, il processo X nello slot 1 viene terminato. Quando il processo X nello slot 1 viene terminato, il processo X nello slot 2 passa allo slot 1. Quando si raccoglie il quarto campione per il processo X nello slot 2, il primo valore è ora 20 anziché 1.000 e il secondo valore è 1.500. Quando si formatta il valore del contatore, si ottengono 1.480 millisecondi anziché i 500 millisecondi previsti. Quando si formatta il quinto valore di esempio, si dovrebbe ottenere il valore previsto.
Esempio | Slot 0 per il processo X | Slot 1 per il processo X | Slot 2 per il processo X |
---|---|---|---|
Esempio 1 | 0 | 0 | 0 |
Esempio 2 | 20 | 10 | 500 |
Esempio 3 | 40 | 20 | 1,000 |
Esempio 4 | 60 | 1.500 (dal primo slot 2) | Non applicabile. Ora raccolto nello slot 1. |
Esempio 5 | 80 | 2.000 | Non applicabile. Ora raccolto nello slot 1. |
Suggerimento
A partire da Windows 11, puoi evitare questo problema usando il nuovo Process V2
contatore. Il Process V2
contatore include l'ID processo nel nome dell'istanza. In questo modo si evitano i risultati incoerenti visualizzati con il contatore originale Process
.