Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[SORTA OT] Getting CPU usage of a process

13 views
Skip to first unread message

Joe Van Dyk

unread,
Nov 10, 2005, 12:08:32 PM11/10/05
to
Hi,

I'd like to be able to get the CPU usage of a particular process.
What are my options for doing so from Ruby?

I've found the libgtop ruby binding, and I could use that, but I would
rather not bring in another dependency. This will run on Linux
systems only.

And would I want to use the elapsed real cpu time? Or the sum of the
elapsed user and system cpu time? (and then I believe I divide that
by the elapsed wall clock time)

Thanks,
Joe


Kero

unread,
Nov 10, 2005, 6:39:13 PM11/10/05
to

man proc, look for "/proc/[number]/stat"
It contains a set of times spent by the process and its children.
it also contains the starttime, so this should allow you to compute "Cpu
usage of the process".

Hth,
Kero.

+--- Kero ---------------------------------- kero@chello@nl ---+
| The last good thing written in C++ was the Pachelbel Canon |
| Jerry Olson |
+--- M38c ------------ http://members.chello.nl/k.vangelder ---+

Joe Van Dyk

unread,
Nov 10, 2005, 7:45:34 PM11/10/05
to
On 11/10/05, Kero <ke...@chello.single-dot.nl> wrote:
> > I'd like to be able to get the CPU usage of a particular process.
> > What are my options for doing so from Ruby?
> >
> > I've found the libgtop ruby binding, and I could use that, but I would
> > rather not bring in another dependency. This will run on Linux
> > systems only.
> >
> > And would I want to use the elapsed real cpu time? Or the sum of the
> > elapsed user and system cpu time? (and then I believe I divide that
> > by the elapsed wall clock time)
>
> man proc, look for "/proc/[number]/stat"
> It contains a set of times spent by the process and its children.
> it also contains the starttime, so this should allow you to compute "Cpu
> usage of the process".

Thanks, I'm aware of /procproc.

I want to be able to constantly keep the user updated on how much of
the cpu the application is using.

Would I take the sum of the elapsed user and system cpu time and
divide that by the elapsed wall clock time to get the current cpu
percentage?


Joe Van Dyk

unread,
Nov 10, 2005, 7:46:18 PM11/10/05
to

And one other question, does anyone know how I might do this on
Windows via Ruby?


x1

unread,
Nov 10, 2005, 9:20:02 PM11/10/05
to
Seems to be lots of win32ole stuff that's usefull here:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_tasks__performance_monitoring.asp

this seems tto work ok on a process name but.. not sure how to do it on an id..
wscript.exe test.vbs
-------test.vbs-------
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
set PerfProcess = objWMIService.Get(_
"Win32_PerfFormattedData_PerfProc_Process.Name='Idle'")

While (True)
PerfProcess.Refresh_
Wscript.Echo PerfProcess.PercentProcessorTime
Wscript.Sleep 1000
Wend
--------/test.vbs--------

Kero

unread,
Nov 11, 2005, 3:35:19 AM11/11/05
to
>> > I'd like to be able to get the CPU usage of a particular process.
>> > What are my options for doing so from Ruby?
>> >
>> > And would I want to use the elapsed real cpu time? Or the sum of the
>> > elapsed user and system cpu time? (and then I believe I divide that
>> > by the elapsed wall clock time)
>>
>> man proc, look for "/proc/[number]/stat"
>> It contains a set of times spent by the process and its children.
>> it also contains the starttime, so this should allow you to compute "Cpu
>> usage of the process".
>
> Would I take the sum of the elapsed user and system cpu time and
> divide that by the elapsed wall clock time to get the current cpu
> percentage?

That's what I would start with.

Then you'll want to remember values of 'some time ago' so you can do the
computation 'over the last some-time', as well as 'from the start of the
process'.

0 new messages