为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

阿波罗的战车 2019-09-19 16:46:11

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

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

  1. 在用户代码中花费的CPU时间,以jiffies为单位

  2. 在内核代码中花费的CPU时间,以jiffies为单位

  3. 在用户代码中花费的CPU时间,包括来自孩子的时间

  4. 在内核代码中花费的CPU时间,包括来自子代的时间

花费14到17之和的总时间是多少?


查看完整描述

3 回答

?
qq_遁去的一_1

制备

要计算特定进程的CPU使用率,您需要以下内容:


/proc/uptime

#1 系统正常运行时间(秒)

/proc/[PID]/stat

#14 utime- 用户代码中花费的CPU时间,以时钟周期计算

#15 stime- 在内核代码中花费的CPU时间,以时钟周期计算

#16 cutime- 等待孩子在用户代码中花费的 CPU时间(以时钟周期为单位)

#17 cstime- 等待孩子在内核代码中花费的 CPU时间(以时钟周期为单位)

#22 starttime- 过程开始的时间,以时钟滴答为单位

赫兹(系统的每秒时钟周期数)。

在大多数情况下,getconf CLK_TCK可用于返回时钟周期数。

在sysconf(_SC_CLK_TCK)C函数调用也可以用来返回赫兹值。

计算

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


total_time = utime + stime

我们还必须决定是否要包括儿童流程的时间。如果我们这样做,那么我们将这些值添加到total_time:


total_time = total_time + cutime + cstime

接下来,我们获取自进程启动以来的总耗用时间(以秒为单位):


seconds = uptime - (starttime / Hertz)

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


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


查看完整回答
反对 回复 2019-09-19
?
宝慕林4294392

是的,你可以这么说。您可以使用公式将这些值转换为秒:


      sec = jiffies / HZ ; here - HZ = number of ticks per second

HZ值是可配置的 - 在内核配置时完成。


查看完整回答
反对 回复 2019-09-19
?
FFIVE

如果需要计算过程在过去10秒内使用了多少cpu%


在jiffies中获取total_time(13 + 14)=> t1 starttime(22)in jiffies => s1

- 延迟10秒


jiffies => t2 starttime(22)in jiffies => s2中的total_time(13 + 14)


t2-t1 * 100 / s2 - s1不会给%??


查看完整回答
反对 回复 2019-09-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信