Obtención de datos de rendimiento estadísticos
En WMI, puede definir datos estadísticos de rendimiento basados en datos en clases de rendimiento con formato derivadas de Win32_PerfFormattedData. Las estadísticas disponibles son promedio, mínimo, máximo, intervalo y varianza, tal y como se define en Tipos de contadores estadísticos.
En esta lista se incluyen los tipos de contador estadísticos especiales siguientes:
En los ejemplos siguientes se muestra cómo realizar estas acciones:
- Crear un archivo MOF que defina una clase de datos calculados.
- Escribir un script que cree una instancia de la clase y actualice periódicamente los datos de la instancia con los valores estadísticos recalculados.
Archivo MOF
En el ejemplo de código MOF siguiente se crea una clase de datos calculada nueva denominada Win32_PerfFormattedData_AvailableMBytes. Esta clase contiene datos de la propiedad AvailableMBytes de la clase sin procesar Win32_PerfRawData_PerfOS_Memory. La clase Win32_PerfFormattedData_AvailableBytes define las propiedades Average, Min, Max, Range y Variance.
El archivo MOF usa los Calificadores de propiedades para clases de contador de rendimiento para definir el origen de datos de propiedad y la fórmula de cálculo.
- La propiedad Average obtiene datos sin procesar de la propiedad Win32_PerfRawData_PerfOS_Memory.AvailableMBytes.
- El calificador Counter de la propiedad Average especifica el origen de datos sin procesar.
- El calificador CookingType especifica la fórmula COOKER_MIN para calcular los datos.
- El calificador SampleWindow especifica cuántos ejemplos se deben tomar antes de realizar el cálculo.
// Store the new Win32_PerfFormattedData_MemoryStatistics
// class in the Root\Cimv2 namespace
#pragma autorecover
#pragma namespace("\\\\.\\Root\\CimV2")
qualifier vendor:ToInstance;
qualifier guid:ToInstance;
qualifier displayname:ToInstance;
qualifier perfindex:ToInstance;
qualifier helpindex:ToInstance;
qualifier perfdetail:ToInstance;
qualifier countertype:ToInstance;
qualifier perfdefault:ToInstance;
qualifier defaultscale:ToInstance;
qualifier dynamic:ToInstance;
qualifier hiperf:ToInstance;
qualifier AutoCook:ToInstance;
qualifier AutoCook_RawClass:ToInstance;
qualifier CookingType:ToInstance;
qualifier Counter:ToInstance;
// Define the Win32_PerFormattedData_MemoryStatistics
// class, derived from Win32_PerfFormattedData
[
dynamic,
// Name of formatted data provider: "WMIPerfInst" for Vista
// and later
provider("HiPerfCooker_v1"),
// Text that will identify new counter in Perfmon
displayname("My Calculated Counter"),
// A high performance class
Hiperf,
// Contains calculated data
Cooked,
// Value must be 1
AutoCook(1),
// Raw performance class to get data for calculations
AutoCook_RawClass("Win32_PerfRawData_PerfOS_Memory"),
// Value must be 1
AutoCook_RawDefault(1),
// Name of raw class property to use for timestamp in formulas
PerfSysTimeStamp("Timestamp_PerfTime"),
// Name of raw class property to use for frequency in formulas
PerfSysTimeFreq("Frequency_PerfTime"),
// Name of raw class property to use for timestamp in formulas
Perf100NSTimeStamp("Timestamp_Sys100NS"),
// Name of raw class property to use for frequency in formulas
Perf100NSTimeFreq("Frequency_Sys100NS"),
// Name of raw class property to use for timestamp in formulas
PerfObjTimeStamp("Timestamp_Object"),
// Name of raw class property to use for frequency in formulas
PerfObjTimeFreq("Frequency_Object"),
// Only one instance of class allowed in namespace
singleton
]
class Win32_PerfFormattedData_MemoryStatistics
: Win32_PerfFormattedData
{
// Define the properties for the class.
// All the properties perform different
// statistical operations on the same
// property, AvailableMBytes, in the raw class
// Define the Average property,
// which uses the "COOKER_AVERAGE" counter type and
// gets its data from the AvailableMBytes
// property in the raw class
[
CookingType("COOKER_AVERAGE"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Average = 0;
// Define the Min property, which uses
// the "COOKER_MIN" counter type and
// gets its data from the AvailableMBytes
// property in the raw class
[
CookingType("COOKER_MIN"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Min = 0;
// Define the Max property, which uses
// the "COOKER_MAX" counter type and
// gets its data from the
// AvailableMBytes property in the raw class
[
CookingType("COOKER_MAX"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Max = 0;
// Define the Range property, which uses
// the "COOKER_RANGE" counter type and
// gets its data from the AvailableMBytes
// property in the raw class
[
CookingType("COOKER_RANGE"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Range = 0;
// Define the Variance property, which uses
// the "COOKER_VARIANCE" counter type and
// gets its data from the AvailableMBytes
// property in the raw class
[
CookingType("COOKER_VARIANCE"),
Counter("AvailableMBytes"),
SampleWindow(10)
]
uint64 Variance = 0;
};
Script
En el ejemplo de código de script siguiente se obtienen estadísticas sobre la memoria disponible, en megabytes, mediante el código MOF creado anteriormente. El script usa el objeto de scripting SWbemRefresher para crear un actualizador que contenga una instancia de la clase de estadísticas que crea el archivo MOF, que es Win32_PerfFormattedData_MemoryStatistics. Para obtener más información sobre el uso de scripts, vea Actualización de datos de WMI en scripts. Si trabaja en C++, vea Acceso a datos de rendimiento en C++.
Nota
Se debe llamar a SWbemRefreshableItem.Object después de obtener el elemento de la llamada a SWbemRefresher.Add o se producirá un error en el script. Se debe llamar a SWbemRefresher.Refresh antes de escribir el bucle para obtener valores de base de referencia, si no, las propiedades estadísticas son cero (0) en el primer paso.
' Connect to the Root\Cimv2 namespace
strComputer = "."
Set objService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
' Create a refresher
Set Refresher = CreateObject("WbemScripting.SWbemRefresher")
If Err <> 0 Then
WScript.Echo Err
WScript.Quit
End If
' Add the single instance of the statistics
' class to the refresher
Set obMemoryStatistics = Refresher.Add(objService, _
"Win32_PerfFormattedData_MemoryStatistics=@").Object
' Refresh once to obtain base values for cooking calculations
Refresher.Refresh
Const REFRESH_INTERVAL = 10
' Refresh every REFRESH_INTERVAL seconds
For I=1 to 3
WScript.Sleep REFRESH_INTERVAL * 1000
Refresher.Refresh
WScript.Echo "System memory statistics" _
& "(Available Megabytes) " _
& "for the past 100 seconds - pass " & i
WScript.Echo "Average = " _
& obMemoryStatistics.Average & VBNewLine & "Max = " _
& obMemoryStatistics.Max & VBNewLine & "Min = " _
& obMemoryStatistics.Min & VBNewLine & "Range = " _
& obMemoryStatistics.Range & VBNewLine & "Variance = " _
& obMemoryStatistics.Variance
Next
Ejecución del script
En este procedimiento se describe cómo ejecutar el ejemplo.
Procedimientos para ejecutar el script de ejemplo
- Copie tanto el código MOF como el script en los archivos del equipo.
- Asigne una extensión .mof al archivo MOF y una descripción .vbs al archivo de script.
- En la línea de comandos, cambie al directorio donde se almacenan los archivos y ejecute Mofcomp en el archivo MOF. Por ejemplo, si asigna un nombre al archivo CalculatedData.mof, el comando es MofcompCalculatedData.mof
- Ejecute el script.
Temas relacionados
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de