Compartir a través de


Obtención de datos estadísticos de rendimiento

En WMI, puede definir datos estadísticos de rendimiento basados en datos en clases de rendimiento formateadas derivadas de Win32_PerfFormattedData. Las estadísticas disponibles son media, mínimo, máximo, rango y varianza, tal y como se definen en Tipos de contadores estadísticos.

La siguiente lista incluye los tipos de contadores estadísticos especiales:

Los siguientes ejemplos muestran cómo hacerlo:

  • Crear un archivo MOF que defina una clase de datos calculados.
  • Escriba una secuencia de comandos que cree una instancia de la clase y actualice periódicamente los datos de la instancia con los valores estadísticos recalculados.

Archivo MOF

El siguiente ejemplo de código MOF crea una nueva clase de datos calculados denominada Win32_PerfFormattedData_AvailableMBytes. Esta clase contiene datos desde la AvailableMBytes propiedad de la clase prima Win32_PerfRawData_PerfOS_Memory. La Win32_PerfFormattedData_AvailableBytes clase define la propiedad Media, Mínimo, Máximo, Rango, y Variación.

El archivo MOF usa los Calificadores de propiedades para clases de contadores de rendimiento con formato para definir la fuente de datos de la propiedad y la fórmula de cálculo.

  • The Media propiedad obtiene datos primos desde el Win32_PerfRawData_PerfOS_Memory.AvailableMBytes propiedad.
  • El contador calificador para la media propiedad especifica la fuente de datos primos.
  • El CookingType calificador especifica la fórmula COOKER_MIN para calcular los datos.
  • El SampleWindow calificador especifica cuántas muestras deben tomarse 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

El siguiente ejemplo de código script obtiene estadísticas sobre la memoria disponible, en megabytes, utilizando el MOF creado anteriormente. El script usa el SWbemRefresher objeto de script para crear un refresco que contenga una instancia de la clase estadística que crea el archivo MOF, que es Win32_PerfFormattedData_MemoryStatistics. Para obtener más información sobre el uso de guiones, consulte Actualización de datos WMI en scripts. Si se trabaja en C++, véase Acceso a los datos de rendimiento en C++.

Nota:

SWbemRefreshableItem.Object debe llamarse después de obtener el elemento de la llamada a SWbemRefresher.Add o el script fallará. SWbemRefresher.Refresh debe llamarse antes de entrar en el bucle para obtener valores de referencia, o las propiedades estadísticas serán cero (0) en la primera pasada.

 

' 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

Ejecutar el script

El siguiente procedimiento describe cómo ejecutar el ejemplo.

Para ejecutar el script de ejemplo

  1. Copie tanto el código MOF como el script en archivos de su ordenador.
  2. Dé al archivo MOF una extensión .mof y al archivo script una descripción .vbs.
  3. En la línea de comandos, cambie al directorio donde están almacenados los archivos y ejecute Mofcomp en el archivo MOF. Por ejemplo, si nombra el archivo CalculatedData.mof, entonces el comando es Mofcomp CalculatedData.mof
  4. Ejecute el script.

Supervisión de datos de rendimiento

Acceso a las clases de rendimiento preinstaladas de WMI

Calificadores de propiedades para clases de contadores de rendimiento con formato

Tipos de contadores estadísticos