dcsimg

Monitor CPU Usage of All Running Processes - Part II

November 16, 2005

Part I of this article illustrated how to monitor CPU usage of running processes on a local machine or from a remote machine. This article illustrates how to monitor the CPU usage of different running processes on different machines and collect the information in a database.

This article uses the "Win32_PerfFormattedData_PerfProc_Process" WMI class to get the information from the performance counters of a machine.

Pre-requisite

a. Machine and the login used should be capable of accessing Windows management instrumentation.

b. Operating System on that machine should be above windows 2000.

Steps

a.  Create C:\monitorprocess\ Servers.txt as shown below. [Refer Fig 1.0].

IMLNODE1
ATDBQA
IMLNODE2
JC022247

Note: Please replace the list of machine names available on your network.

Click for larger image

[Fig 1.0]

b.  Create C:\monitorprocess\ Listremoteprocess2.vbs as shown below. [Refer Fig 1.1]. Please download Listremoteprocess2.vbs_.

'Objective: To Find the CPU usage of each process that are running on a remote machine
'Created by : MAK
'Created Date: Nov 2, 2005
'Syntax: cscript Listremoteprocess2.vbs machinename
'Example: cscript Listremoteprocess2.vbs MyMachine
Set objArgs = WScript.Arguments
strComputer =objArgs(0)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = 
objWMIService.ExecQuery("Select * from Win32_PerfFormattedData_PerfProc_Process",,48)
'   wscript.echo "Computer Name" & "," & "Process Name" & ","& "CPU Usage"
For Each objItem in colProcesses
if objItem.Name <> "Idle"  and objItem.Name <> "_Total" then 
   wscript.echo strcomputer & ",
   " & objItem.Name & ",
   "& objItem.PercentProcessorTime
end if
Next


Click for larger image

[Fig 1.1]

c.  Create the file C:\monitorprocess\ Listaprocessremote.bat as shown below. [Refer fig 1.2]. Download Listaprocessremote.bat_.

REM Objective: To execute the Listremoteprocess2.vbsfor every server listed in servers.txt
REM Created by: MAK
REM Created by" Nov 2, 2005
REM Usage: Listaprocessremote.bat Allservers.csv
dir %1
if %errorlevel% == 0 goto process
goto delfile
:delfile
del %1
goto process
:process
for /f "tokens=1 delims=&" %%i in (c:\Monitorprocess\Servers.txt) 
do cscript/nologo c:\Monitorprocess\Listremoteprocess2.vbs %%i >>%1
goto end
:end


[Fig 1.2]

d.  Execute the batch file as shown below. [Refer Fig 1.3].

Listaprocessremote.bat myserverprocess.csv

Or

c:\monitorprocess\Listaprocessremote.bat c:\monitorprocess\myserverprocess.csv


[Fig 1.3]

e.  When this batch file is executed, it deletes the existing csv file, finds all of the processes that are running on a remote machine and their CPU usage and stores it in myserverprocess.csv file with the following message.


[Fig 1.4]

f.  The .csv file can be viewed using Excel or notepad as shown below. [Refer Fig 1.5].

ATDBQA, sysdown, 0
ATDBQA, ClusSvc, 0
ATDBQA, cpqnimgt, 0
ATDBQA, cqmgserv, 0
ATDBQA, cqmgstor, 0
ATDBQA, cqmghost, 0
ATDBQA, cpqwmgmt, 0
ATDBQA, ResrcMon, 0
ATDBQA, naPrdMgr, 0
ATDBQA, wmiprvse, 0
ATDBQA, svchost, 0
ATDBQA, msdtc, 0
ATDBQA, sqlservr, 0
ATDBQA, sqlagent, 0
ATDBQA, DWRCS, 0
ATDBQA, locator, 0
ATDBQA, server, 0
ATDBQA, logon.scr, 0


[Fig 1.5]

g.  Let us create a database, Table and login as shown below.

create database MonitorProcesses
go
use MonitorProcesses
go
Create table Processes (
id int identity (1,1) not null,
ServerName varchar(128),
ProcessName varchar(256),
CPU_Usage int not null,
Time datetime constraint currentdate default getdate())
go
Create view Processes_view as
select ServerName,ProcessName, CPU_Usage from Processes
go
use master
go
sp_addlogin 'procuser','B07250BE','MonitorProcesses'
go
use MonitorProcesses
go
sp_adduser 'procuser'
go
sp_addrolemember 'db_datareader','procuser'
go
sp_addrolemember 'db_datawriter','procuser'
go

h.  Let us import the myserverprocess.csv file using the following BULK INSERT command.

use MonitorProcesses
go
BULK INSERT MonitorProcesses.dbo.Processes_view 
   FROM 'c:\Monitorprocess\myserverprocess.csv'
   WITH 
      (
         FIELDTERMINATOR = ',',
         ROWTERMINATOR = '\n'
      )

i.  This import process can be created as a scheduled job that imports this file daily. [Refer Fig 1.6, 1.7].


[Fig 1.6]


[Fig 1.7]

j.  The table Process collects information about all of the processes and CPU usage from all of the servers. The table can be queried as shown below.

select * from Processes
select * from Processes where processname like '%SQLServr'
Select * from Processes where servername ='ATDBQA'

The result would look similar to that shown below.

312

ATDBQA

msdtc

6

11/3/05 10:31 PM

313

ATDBQA

sqlservr

0

11/3/05 10:31 PM

314

ATDBQA

sqlagent

0

11/3/05 10:31 PM

315

ATDBQA

DWRCS

0

11/3/05 10:31 PM

316

ATDBQA

locator

2

11/3/05 10:31 PM

317

ATDBQA

server

0

11/3/05 10:31 PM

318

ATDBQA

logon.scr

0

11/3/05 10:31 PM

319

ATDBQA

wmiprvse

76

11/3/05 10:31 PM

320

IMLNODE2

System

0

11/3/05 10:31 PM

321

IMLNODE2

smss

0

11/3/05 10:31 PM

322

IMLNODE2

csrss

0

11/3/05 10:31 PM

323

IMLNODE2

winlogon

0

11/3/05 10:31 PM

324

IMLNODE2

services

0

11/3/05 10:31 PM

325

IMLNODE2

lsass

0

11/3/05 10:31 PM

326

IMLNODE2

svchost

0

11/3/05 10:31 PM

327

IMLNODE2

svchost

0

11/3/05 10:31 PM

328

IMLNODE2

svchost

0

11/3/05 10:31 PM

329

IMLNODE2

svchost

31

11/3/05 10:31 PM

330

IMLNODE2

svchost

0

11/3/05 10:31 PM

331

IMLNODE2

spoolsv

0

11/3/05 10:31 PM

Conclusion

This article has illustrated how to monitor the CPU usage of different running processes on different machines, how to collect the information in a database table and automate the import process by scheduling.

» See All Articles by Columnist MAK








The Network for Technology Professionals

Search:

About Internet.com

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers