mSO mSO - 6 months ago 83
Linux Question

How do I get the total CPU usage of an application from /proc/pid/stat?

I was wondering how to calculate the total CPU usage of a process.

If I do

cat /proc/pid/stat
, I think the relevant fields are (taken from lindevdoc.org):


  1. CPU time spent in user code, measured in jiffies

  2. CPU time spent in kernel code, measured in jiffies

  3. CPU time spent in user code, including time from children

  4. CPU time spent in kernel code, including time from children



So is the total time spend the sum of fields 14 to 17?

Answer

Preparation

To calculate CPU usage for a specific process you'll need the following:

  1. /proc/uptime
    • #1 uptime of the system (seconds)
  2. /proc/[PID]/stat
    • #14 utime - CPU time spent in user code, measured in clock ticks
    • #15 stime - CPU time spent in kernel code, measured in clock ticks
    • #16 cutime - Waited-for children's CPU time spent in user code (in clock ticks)
    • #17 cstime - Waited-for children's CPU time spent in kernel code (in clock ticks)
    • #22 starttime - Time when the process started, measured in clock ticks
  3. Hertz (number of clock ticks per second) of your system.

Calculation

First we determine the total time spent for the process:

total_time = utime + stime

We also have to decide whether we want to include the time from children processes. If we do, then we add those values to total_time:

total_time = total_time + cutime + cstime

Next we get the total elapsed time in seconds since the process started:

seconds = uptime - (starttime / Hertz)

Finally we calculate the CPU usage percentage:

cpu_usage = 100 * ((total_time / Hertz) / seconds)

See also

Top and ps not showing the same cpu result

How to get total cpu usage in Linux (c++)

Calculating CPU usage of a process in Linux