Monitor CPU Usage of All Running Processes – Part II



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



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

Latest Articles