Monitoraggio dei dati sulle prestazioni
Con WMI è possibile accedere ai dati dei contatori di sistema a livello di codice dagli oggetti nelle librerie delle prestazioni. Si tratta degli stessi dati sulle prestazioni visualizzati in Monitoraggio di sistema nell'utilità Perfmon. Usare le classi di contatori delle prestazioni preinstallate per ottenere dati sulle prestazioni in script o applicazioni C++.
Le sezioni seguenti sono descritte in questo argomento:
- Classi di prestazioni WMI
- Provider di dati delle prestazioni
- Uso delle classi di dati delle prestazioni formattate
- Uso di classi di dati sulle prestazioni non elaborate
- Argomenti correlati
Classi di prestazioni WMI
Ad esempio, l'oggetto "NetworkInterface", in Monitoraggio di sistema, è rappresentato in WMI dalla classe Win32_PerfRawData_Tcpip_NetworkInterface per i dati non elaborati e la classe Win32_PerfFormattedData_Tcpip_NetworkInterface per i dati precalcolati o formattati. Le classi derivate da Win32_PerfRawData e da Win32_PerfFormattedData devono essere usate con un oggetto refresher. Nelle classi di dati non elaborate, l'applicazione o lo script C++ devono eseguire calcoli per ottenere lo stesso output di Perfmon.exe. Le classi di dati formattate forniscono dati precalcolati. Per altre informazioni su come ottenere dati nelle applicazioni C++, vedere Accesso ai dati sulle prestazioni in C++. Per la creazione di script, vedere Accesso ai dati sulle prestazioni nello script e aggiornamento dei dati WMI negli script.
Nell'esempio di codice VBScript seguente viene usato Win32_PerfFormattedData_PerfProc_Process per ottenere i dati sulle prestazioni per il processo inattiva. Lo script visualizza gli stessi dati visualizzati in Perfmon per il contatore % tempo processore dell'oggetto Process. La chiamata a SWbemObjectEx.Refresh_ esegue l'operazione di aggiornamento. Tenere presente che i dati devono essere aggiornati, almeno una volta, per ottenere una linea di base.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
set PerfProcess = objWMIService.Get(_
"Win32_PerfFormattedData_PerfProc_Process.Name='Idle'")
While (True)
PerfProcess.Refresh_
Wscript.Echo PerfProcess.PercentProcessorTime
Wscript.Sleep 1000
Wend
Le classi dei contatori delle prestazioni possono anche fornire dati statistici. Per altre informazioni, vedere Recupero di dati statistici sulle prestazioni.
Provider di dati delle prestazioni
WMI include provider preinstallati che monitorano le prestazioni del sistema sia nel sistema locale che in remoto. Il provider WmiPerfClass crea le classi derivate da Win32_PerfRawData e da Win32_PerfFormattedData. Il provider WmiPerfInst fornisce i dati in modo dinamico alle classi non elaborate e formattate.
Uso delle classi di dati delle prestazioni formattate
Nell'esempio di codice VBScript seguente vengono ottenuti dati sulle prestazioni relativi a memoria, partizioni disco e code di lavoro del server. Lo script determina quindi se i valori si trovano all'interno di un intervallo accettabile.
Lo script usa gli oggetti provider WMI e gli oggetti di scripting seguenti:
- Classi di contatori delle prestazioni WMI preinstallate.
- Oggetto refresher, SWbemRefresher.
- Elementi da aggiungere al contenitore refresher, SWbemRefreshableItem
Set objCimv2 = GetObject("winmgmts:root\cimv2")
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
' Add items to the SWbemRefresher
' Without the SWbemRefreshableItem.ObjectSet call,
' the script will fail
Set objMemory = objRefresher.AddEnum _
(objCimv2, _
"Win32_PerfFormattedData_PerfOS_Memory").ObjectSet
Set objDiskQueue = objRefresher.AddEnum _
(objCimv2, _
"Win32_PerfFormattedData_PerfDisk_LogicalDisk").ObjectSet
Set objQueueLength = objRefresher.AddEnum _
(objCimv2, _
"Win32_PerfFormattedData_PerfNet_ServerWorkQueues").ObjectSet
' Initial refresh needed to get baseline values
objRefresher.Refresh
intTotalHealth = 0
' Do three refreshes to get data
For i = 1 to 3
WScript.Echo "Refresh " & i
For each intAvailableBytes in objMemory
WScript.Echo "Available megabytes of memory: " _
& intAvailableBytes.AvailableMBytes
If intAvailableBytes.AvailableMBytes < 4 Then
intTotalHealth = intTotalHealth + 1
End If
Next
For each intDiskQueue in objDiskQueue
WScript.Echo "Current disk queue length " & "Name: " _
& intDiskQueue.Name & ":" _
& intDiskQueue.CurrentDiskQueueLength
If intDiskQueue.CurrentDiskQueueLength > 2 Then
intTotalHealth = intTotalHealth + 1
End If
Next
For each intServerQueueLength in objQueueLength
WScript.Echo "Server work queue length: " _
& intServerQueueLength.QueueLength
If intServerQueueLength.QueueLength > 4 Then
intTotalHealth = intTotalHealth + 1
End If
Wscript.Echo " "
Next
If intTotalHealth > 0 Then
Wscript.Echo "Unhealthy."
Else
Wscript.Echo "Healthy."
End If
intTotalHealth = 0
Wscript.Sleep 5000
' Refresh data for all objects in the collection
objRefresher.Refresh
Next
Uso di classi di dati sulle prestazioni non elaborate
Nell'esempio di codice VBScript seguente viene ottenuto il tempo del processore raw, current percent nel computer locale e lo converte in percentuale. Nell'esempio viene illustrato come ottenere dati sulle prestazioni non elaborati dalla proprietà PercentProcessorTime della classe Win32_PerfRawData_PerfOS_Processor .
Per calcolare il valore del tempo processore percentuale, è necessario individuare la formula. Cercare il valore nel qualificatore CounterType per la proprietà PercentProcessorTime nella tabella CounterType Qualifier per ottenere il nome della costante. Individuare il nome della costante in Tipi di contatore per ottenere la formula.
Set objService = GetObject( _
"Winmgmts:{impersonationlevel=impersonate}!\Root\Cimv2")
For i = 1 to 8
Set objInstance1 = objService.Get( _
"Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
N1 = objInstance1.PercentProcessorTime
D1 = objInstance1.TimeStamp_Sys100NS
'Sleep for two seconds = 2000 ms
WScript.Sleep(2000)
Set perf_instance2 = objService.Get( _
"Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
N2 = perf_instance2.PercentProcessorTime
D2 = perf_instance2.TimeStamp_Sys100NS
' Look up the CounterType qualifier for the PercentProcessorTime
' and obtain the formula to calculate the meaningful data.
' CounterType - PERF_100NSEC_TIMER_INV
' Formula - (1- ((N2 - N1) / (D2 - D1))) x 100
PercentProcessorTime = (1 - ((N2 - N1)/(D2-D1)))*100
WScript.Echo "% Processor Time=" , Round(PercentProcessorTime,2)
Next
Argomenti correlati