WMI로 CPU 사용량 수집하는 세가지 방법
1. 요건 실행 당시 CPU를 꽤나 많이 잡아 먹지만 그 당시의 CPU 사용량을 가장 정확히 나타낸다.
(수집할 때 요거 때문에 사용되는 CPU 로드는 제외하고 수집한다.)
for each System in ProcSet
Wscript.echo system.LoadPercentage
Next
2. 윈도우 2003 & XP 에서만 된다.(2000은 안 됨)
순간을 잡아내는 정확도는 떨어지나...... 나름 쓸만하다.
For 문을 사용해서 두번을 돌렸는데.. 그 이유인 즉슨...
최초에 정보를 수집할 때 0 으로 나오더라.. 뷁 =ㅠ= 정확한 원인은 모르겠다 ㅡㅡ;;;;;
그 이후에는 정상적으로 수집한다.
& "{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 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 로드를 대충 잡아 낼 수는 있다.
* 이곳저곳에서 자료를 참조한거 같은데.. 꽤나 오래되서 기억이 안 난다 =ㅠ=;;;;
댓글