Udostępnij przez


Uzyskiwanie danych dotyczących wydajności statystycznej

W usłudze WMI można zdefiniować statystyczne dane wydajności na podstawie danych w sformatowanych klasach wydajności pochodzących z Win32_PerfFormattedData. Dostępne statystyki to średnia, minimalna, maksymalna, zakres i wariancja, zgodnie z definicjami w Typy Liczników Statystycznych.

Poniższa lista zawiera specjalne typy liczników statystycznych:

W poniższych przykładach pokazano, jak:

  • Utwórz plik MOF, który definiuje klasę danych obliczeniowych.
  • Napisz skrypt, który tworzy wystąpienie klasy i okresowo odświeża dane w wystąpieniu przy użyciu ponownie obliczonych wartości statystycznych.

Plik MOF

Poniższy przykład kodu MOF tworzy nową klasę danych obliczeniowych o nazwie Win32_PerfFormattedData_AvailableMBytes. Ta klasa zawiera dane z właściwości AvailableMBytes klasy nieprzetworzonej Win32_PerfRawData_PerfOS_Memory. Klasa Win32_PerfFormattedData_AvailableBytes definiuje właściwości Average, Min, Max, Rangei Variance.

Plik MOF używa kwalifikatorów właściwości dla sformatowanych klas liczników wydajności do zdefiniowania źródła danych właściwości i formuły obliczeniowej.

  • Właściwość Average uzyskuje nieprzetworzone dane z Win32_PerfRawData_PerfOS_Memory, a właściwośćAvailableMBytes.
  • Kwalifikator licznika dla właściwości Average określa pierwotne źródło danych.
  • Kwalifikator CookingType określa formułę COOKER_MIN do obliczania danych.
  • Kwalifikator SampleWindow określa liczbę próbek do wykonania przed wykonaniem obliczeń.
// 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;
};

Skrypt

Poniższy przykład kodu skryptu uzyskuje statystyki dotyczące dostępnej pamięci w megabajtach przy użyciu utworzonego wcześniej narzędzia MOF. Skrypt używa obiektu skryptowego SWbemRefresher, aby utworzyć moduł odświeżania zawierający jedno wystąpienie klasy statystyk tworzonej przez plik MOF, który jest Win32_PerfFormattedData_MemoryStatistics. Aby uzyskać więcej informacji na temat używania skryptów, zobacz Odświeżanie danych usługi WMI w skryptach. Jeśli pracujesz w języku C++, zobacz Uzyskiwanie dostępu do danych wydajności w języku C++.

Notatka

SWbemRefreshableItem.Object należy wywołać po uzyskaniu elementu z wywołania do SWbemRefresher.Add lub skrypt zakończy się niepowodzeniem. SWbemRefresher.Refresh należy wywołać przed rozpoczęciem pętli w celu uzyskania wartości punktu odniesienia, inaczej właściwości statystyczne wynoszą zero (0) podczas pierwszego przebiegu.

 

' 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

Uruchamianie skryptu

Poniższa procedura opisuje sposób uruchamiania przykładu.

Aby uruchomić przykładowy skrypt

  1. Skopiuj zarówno kod MOF, jak i skrypt do plików na komputerze.
  2. Nadaj plikowi MOF rozszerzenie ".mof" i plikowi skryptu rozszerzenie ".vbs".
  3. W wierszu polecenia przejdź do katalogu, w którym są przechowywane pliki, i uruchom Mofcomp w pliku MOF. Jeśli na przykład nadasz plikowi nazwę CalculatedData.mof, polecenie to MofcompCalculatedData.mof
  4. Uruchom skrypt.

monitorowanie danych wydajności

uzyskiwanie dostępu do wstępnie zainstalowanych klas wydajności usługi WMI

kwalifikatory właściwości dla sformatowanych klas liczników wydajności

statystyczne typy liczników