Memantau Data Performa
Dengan menggunakan WMI, Anda dapat mengakses data penghitung sistem secara terprogram dari objek di pustaka performa. Ini adalah data performa yang sama yang muncul di Monitor Sistem di utilitas Perfmon. Gunakan kelas penghitung kinerja yang telah diinstal sebelumnya untuk mendapatkan data performa dalam skrip atau aplikasi C++.
Bagian berikut dibahas dalam topik ini:
- Kelas Performa WMI
- Penyedia Data Performa
- Menggunakan Kelas Data Performa Terformat
- Menggunakan Kelas Data Performa Mentah
- Topik terkait
Kelas Performa WMI
Sebagai contoh, objek "NetworkInterface", di Monitor Sistem, diwakili dalam WMI oleh kelas Win32_PerfRawData_Tcpip_NetworkInterface untuk data mentah dan kelas Win32_PerfFormattedData_Tcpip_NetworkInterface untuk data yang telah dihitung sebelumnya, atau diformat. Kelas yang berasal dari Win32_PerfRawData dan dari Win32_PerfFormattedData harus digunakan dengan objek penyegaran. Pada kelas data mentah, aplikasi atau skrip C++ Anda harus melakukan perhitungan untuk mendapatkan output yang sama dengan Perfmon.exe. Kelas data yang diformat menyediakan data yang telah dihitung sebelumnya. Untuk informasi selengkapnya tentang mendapatkan data dalam aplikasi C++, lihat Mengakses Data Performa di C++. Untuk pembuatan skrip, lihat Mengakses Data Performa dalam Skrip dan Menyegarkan Data WMI dalam Skrip.
Contoh kode VBScript berikut menggunakan Win32_PerfFormattedData_PerfProc_Process untuk mendapatkan data performa untuk proses Menganggur. Skrip menampilkan data yang sama yang muncul di Perfmon untuk penghitung Waktu Prosesor % dari objek Proses. Panggilan ke SWbemObjectEx.Refresh_ melakukan operasi refresh. Ketahuilah bahwa data harus di-refresh, setidaknya sekali, untuk mendapatkan garis besar.
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
Kelas penghitung kinerja juga dapat menyediakan data statistik. Untuk informasi selengkapnya, lihat Mendapatkan Data Performa Statistik.
Penyedia Data Performa
WMI memiliki penyedia yang telah diinstal sebelumnya yang memantau performa sistem pada sistem lokal dan jarak jauh. Penyedia WmiPerfClass membuat kelas yang berasal dari Win32_PerfRawData dan dari Win32_PerfFormattedData. Penyedia WmiPerfInst memasok data secara dinamis ke kelas mentah dan berformat.
Menggunakan Kelas Data Performa Terformat
Contoh kode VBScript berikut mendapatkan data performa tentang memori, partisi disk, dan antrean kerja server. Skrip kemudian menentukan apakah nilai berada dalam rentang yang dapat diterima.
Skrip menggunakan objek penyedia WMI berikut dan objek pembuatan skrip:
- Kelas penghitung kinerja WMI yang telah diinstal sebelumnya.
- Objek penyegaran, SWbemRefresher.
- Item untuk ditambahkan ke kontainer penyegaran, 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
Menggunakan Kelas Data Performa Mentah
Contoh kode VBScript berikut memperoleh waktu prosesor mentah persen saat ini di komputer lokal dan mengonversinya menjadi persentase. Contoh menunjukkan kepada Anda cara mendapatkan data performa mentah dari properti PercentProcessorTime dari kelas Win32_PerfRawData_PerfOS_Processor .
Untuk menghitung nilai waktu prosesor persen, Anda harus menemukan rumus. Cari nilai dalam pengkualifikasi CounterType untuk properti PercentProcessorTime di tabel CounterType Qualifier untuk mendapatkan nama konstanta. Temukan nama konstanta di Tipe Penghitung untuk mendapatkan rumus.
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
Topik terkait