[SORTA OT] Getting CPU usage of a process

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

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".

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 ---+

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?

···

On 11/10/05, Kero <kero@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".

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

···

On 11/10/05, Joe Van Dyk <joevandyk@gmail.com> wrote:

On 11/10/05, Kero <kero@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?

> 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'.

+--- Kero ---------------------------------- kero@chello@nl ---+

The last good thing written in C++ was the Pachelbel Canon |
Jerry Olson |

+--- M38c ------------ http://members.chello.nl/k.vangelder ---+

Seems to be lots of win32ole stuff that's usefull here:

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--------

···

On 11/10/05, Joe Van Dyk <joevandyk@gmail.com> wrote:

On 11/10/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
> On 11/10/05, Kero <kero@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?

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