Avatar billede snowball Novice
24. marts 2010 - 09:29 Der er 1 løsning

Logge CPU forbrug for bestemte processer hvert sekund

Hej.

Jeg er ved at undersøge ressourceforbruget på en række programmer, og har i den forbindelse behov for at kunne logge deres CPU (og evt. RAM) forbrug hvert sekund.

Der er tale om en række navngivne processer hvor nogle af dem kører hele tiden (en service), andre starter og stopper jævnligt og nogle kører i flere instanser.

For at få et overblik over længere tid, så skal informationerne som nævnt logges, og gerne til CSV eller en database så man kan arbejde videre med informationerne og selv lave grafer hvis programmet der logger ikke direkte understøtter dette.

På forhånd tak.
Avatar billede snowball Novice
25. marts 2010 - 23:16 #1
Løste selv problemet ved at lave nedenstående script som logger forbruget til en CSV fil som man så kan lave grafer af i Excel.

OBS: Det er lavet "quick and dirty", hvilket vil sige uden fejlhåndtering, pæn og optimeret kode osv. Al brug er på eget ansvar!


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

Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfProc_Process").objectSet

strFile = "c:\log.csv"

Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FileExists(strDirectory & strFile) Then
  Set objFile = objFSO.CreateTextFile(strFile)
End If

set objFile = nothing

' OpenTextFile Method needs a Const value
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 8

Set objTextFile = objFSO.OpenTextFile (strFile, ForAppending, True)

For i = 1 to 5000
    str1 = 0
    str2 = 0
    str3 = 0

    objRefresher.Refresh
    For Each objItem in colItems
      Select Case UCASE(objItem.Name)
        Case "myProcess1"
          str1 = Round(0 & objItem.PercentProcessorTime / 2)
        Case "myProcess2"
          str2 = Round(0 & objItem.PercentProcessorTime / 2)
        Case "myProcess3"
          str3 = Round(0 & objItem.PercentProcessorTime / 2)
      End Select
    Next
    objTextFile.WriteLine Now & ";" & str1 & ";" & str2 & ";" & str3
    Wscript.Echo "Logging - " & CStr(i)
    Wscript.Sleep 2000
Next

objTextFile.Close
set objFSO = nothing
set objTextFile = nothing



PercentProcessorTime værdien deles med 2 fordi der er 2 kerner i CPU'en.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester