Analyse des données de performances
À l’aide de WMI, vous pouvez accéder aux données des compteurs système par programmation à partir d’objets dans les bibliothèques de performances. Il s’agit des mêmes données de performances que celles affichées dans le moniteur système de l’utilitaire Perfmon. Utilisez les classes de compteur de performances préinstallées pour obtenir des données de performances dans des scripts ou des applications C++.
Les sections suivantes sont présentées dans cette rubrique :
- Classes de performance WMI
- Fournisseurs de données de performances
- Utilisation des classes de données de performances mises en forme
- Utilisation des classes de données de performances brutes
- Rubriques connexes
Classes de performance WMI
Par exemple, l’objet « l’interface réseau », dans le moniteur système, est représenté dans WMI par la classe Win32 _ PerfRawData _ tcpip _ l’interface réseau pour les données brutes et la classe Win32 _ PerfFormattedData _ tcpip _ l’interface réseau pour les données précalculées ou mises en forme. Les classes dérivées de Win32 _ PerfRawData et de Win32 _ PerfFormattedData doivent être utilisées avec un objet d' actualisation . Sur les classes de données brutes, votre application ou script C++ doit effectuer des calculs pour obtenir la même sortie que Perfmon.exe. Les classes de données mises en forme fournissent des données précalculées. Pour plus d’informations sur l’obtention de données dans les applications C++, consultez accès aux données de performances en c++. Pour les scripts, consultez accès aux données de performances dans le script et actualisation des données WMI dans les scripts.
L’exemple de code VBScript suivant utilise le _ _ _ processus Win32 PerfFormattedData perfproc pour obtenir les données de performances du processus inactif. Le script affiche les mêmes données qui apparaissent dans PerfMon pour le compteur% temps processeur de l’objet processus. L’appel à SWbemObjectEx. Refresh _ effectue l’opération d’actualisation. N’oubliez pas que les données doivent être actualisées, à bail une fois, pour obtenir une ligne de 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
Les classes de compteur de performances peuvent également fournir des données statistiques. Pour plus d’informations, consultez obtention de données de performances statistiques.
Fournisseurs de données de performances
WMI a des fournisseurs préinstallés qui surveillent les performances du système sur le système local et à distance. Le fournisseur WmiPerfClass crée les classes dérivées de Win32 _ PerfRawData et de Win32 _ PerfFormattedData. Le fournisseur WmiPerfInst fournit des données de manière dynamique aux classes brutes et mises en forme.
Utilisation des classes de données de performances mises en forme
L’exemple de code VBScript suivant obtient des données de performances sur la mémoire, les partitions de disque et les files d’attente de travail du serveur. Le script détermine ensuite si les valeurs sont comprises dans une plage acceptable.
Le script utilise les objets de fournisseur WMI et les objets de script suivants :
- Classes de compteur de performances WMI préinstallées.
- Objet actualisateur, SWbemRefresher.
- Éléments à ajouter au conteneur d’actualisation, 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
Utilisation des classes de données de performances brutes
L’exemple de code VBScript suivant obtient le pourcentage de temps processeur brut en cours sur l’ordinateur local et le convertit en pourcentage. L’exemple montre comment obtenir des données de performances brutes à partir de la propriété PercentProcessorTime de la classe du _ _ _ processeur PerfRawData perfos Win32 .
Pour calculer la valeur de temps processeur en pourcentage, vous devez rechercher la formule. Recherchez la valeur dans le qualificateur de l’extension de nom de la propriété PercentProcessorTime dans la table de qualificateur . Recherchez le nom de la constante dans types de compteurs pour obtenir la formule.
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