본문 바로가기
TechNical/WMI

CPU 사용량 수집하는 세가지 방법

by 강멍멍이 2008. 1. 8.
반응형

WMI로 CPU 사용량 수집하는 세가지 방법


1. 요건 실행 당시 CPU를 꽤나 많이 잡아 먹지만 그 당시의 CPU 사용량을 가장 정확히 나타낸다.

   (수집할 때 요거 때문에 사용되는 CPU 로드는 제외하고 수집한다.)

Set procset = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & _ "\root\cimv2").InstancesOf ("Win32_Processor")

for each System in ProcSet
 Wscript.echo system.LoadPercentage
Next


2. 윈도우 2003 & XP 에서만 된다.(2000은 안 됨)
   순간을 잡아내는 정확도는 떨어지나...... 나름 쓸만하다.
   For 문을 사용해서 두번을 돌렸는데.. 그 이유인 즉슨...
   최초에 정보를 수집할 때 0 으로 나오더라.. 뷁 =ㅠ= 정확한 원인은 모르겠다 ㅡㅡ;;;;;  
   그 이후에는 정상적으로 수집한다.

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objProcessor = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet

objRefresher.Refresh

For i =1 TO 2
    For Each intProcessorUse in objProcessor
    Wscript.Echo intProcessorUse.PercentProcessorTime
    Next
    Wscript.Sleep 1000
    objRefresher.Refresh
Next


3. 윈도우 2000 버전을 위해서 제작된 것

윈도우 2003 & XP 에서는 지원되는 뭐.. 클래스라고 해야 하나..ㅡ_ㅡ;;
암튼... WMI에서 지원하는 기능이 딸려서 Win 2000 에서는 아래와 같이 정보를 수집해야 한다.

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set cpu_load1 = objWMIService.Get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
CP1 = cpu_load1.PercentProcessorTime
CT1 = cpu_load1.TimeStamp_Sys100NS

WScript.Sleep 1000*3

Set cpu_load2 = objWMIService.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
CP2 = cpu_load2.PercentProcessorTime
CT2 = cpu_load2.TimeStamp_Sys100NS

CPU_Load = (1 - ((CP2 - CP1)/(CT2-CT1)))*100

WScript.Echo Round(CPU_Load,2)



어쨋거나 저쨋거나 CPU 로드를 정확하게 잡아 낼 수는 없을 듯 하다.
순간 순간 치고 올라가는걸 어떻게 다 잡아서 기록을 하오리까  =_=;;
뭐.. 다른 방법이 있기야 있겠지만.... 기록한다고 자원을 더 많이 사용하는거 같아서 Pass~
Windows 작업 관리자를 열 때 순간적으로 CPU가 팍! 하고 올라가는 걸 볼 수가 있다.
작업 관리자를 띄워 놓는 것 만으로도 CPU에 부하를 주는 것 같다.. 단지 추측 -_-;;

아무튼 위와 같이 일정 시간에 CPU 로드를 대충 잡아 낼 수는 있다.

* 이곳저곳에서 자료를 참조한거 같은데.. 꽤나 오래되서 기억이 안 난다 =ㅠ=;;;;

반응형

댓글