一尘不染

如何从/ proc / pid / stat获取应用程序的总CPU使用率?

linux

我想知道如何计算一个进程的总CPU使用率。

如果我这样做,我认为相关字段是(取自lindevdoc.org):cat /proc/ _pid_ /stat

  1. 用户代码中花费的CPU时间(以吉比特为单位)
  2. 花费在内核代码中的CPU时间(以吉比特为单位)
  3. 用户代码中花费的CPU时间,包括来自子代的时间
  4. 花费在内核代码上的CPU时间,包括来自子代的时间

那么总花费时间是14到17字段的总和?


阅读 1025

收藏
2020-06-02

共1个答案

一尘不染

制备

要计算特定进程的CPU使用率,您需要执行以下操作:

  1. /proc/uptime
    • #1 系统正常运行时间(秒)
  2. /proc/[PID]/stat
    • #14 utime-用户代码中花费的CPU时间,以 时钟滴答数为单位
    • #15 stime-花费在内核代码中的CPU时间,以 时钟周期为单位
    • #16 cutime- 等待的儿童 花费在用户代码中 CPU时间(以 时钟滴答为单位
    • #17 cstime- 等待儿童的 CPU时间花费在内核代码中(以 时钟滴答为单位
    • #22 starttime-进程开始的时间,以 时钟滴答为单位
  3. 系统的赫兹(每秒的时钟滴答数)。

计算方式

首先,我们确定该过程花费的总时间:

total_time = utime + stime

我们还必须决定是否要包括子进程中的时间。如果这样做,则将这些值添加到total_time

total_time = total_time + cutime + cstime

接下来,我们获取自该过程开始以来经过的总时间(以 秒为单位)

seconds = uptime - (starttime / Hertz)

最后,我们计算CPU使用率百分比:

cpu_usage = 100 * ((total_time / Hertz) / seconds)
2020-06-02