进程cpu使用率的计算

计算公式

(process jiffies) * 100.0f / ((float)Hertz * (float)et * cpuCoresCount)

亦或

(process jiffies) * 100.0f / (float)Hertz / (float)et / cpuCoresCount

亦或

100 * (process jiffies)/ (float)Hertz / (float)et  / cpuCoresCount

相当于top -p pid 中 %CPU 的值

process jiffies的计算

process jiffies是内核提供的该进程在DeltaT时间内消耗的jiffies。具体是/proc/<pid>/stat文件的第14-17 token。14-17token分别是utime, stime, cutime, cstime。cutime/cstime分别是该进程spawn的子进程在用户态和内核态消耗的jiffies。

process jiffies = utime + stime + cutime + cstime

Jiffies 为Linux核心变数(unsigned long),它被用来记录系统自开机以来,已经过了多少tick。每发生一次timer interrupt,Jiffies变数会被加一。

注意stat中的jiffies是一个绝对累计值,所以要取两个时间点,算DeltaT中消耗的jiffies。

(process jiffies) = (current process jiffies) - (last process jiffies)

Hertz(tick per second)

什么是jiffies呢?其实就是Linux内核定义的一个时间单位,值就是1/Hertz。Linux内核中,进程/线程消耗的时间,单位都是这个 jiffies。

Hertz就是CLK_TCK,可以根据getconf CLK_TCK获取

LINUX系统时钟频率是一个常数HZ来决定的, 通常HZ=100,即100Hz,一个周期即为 1/100s = 10ms = 10^7 ns,那么他的精度度就是10ms(毫秒)。也就是说每10ms一次中断。所以一般来说Linux的精确度是10毫秒。

et

这里是每次统计的间隔时间,单位为秒

(System.nanoTime() - lastNanoTime) * 1E-9

cpu核数

/usr/bin/nproc

或者

cat /proc/cpuinfo | grep processor | wc -l

doc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值