资讯专栏INFORMATION COLUMN

进程cpu使用率的计算

kid143 / 3230人阅读

摘要:计算公式亦或亦或相当于中的值的计算是内核提供的该进程在时间内消耗的。分别是该进程的子进程在用户态和内核态消耗的。注意中的是一个绝对累计值,所以要取两个时间点,算中消耗的。内核中,进程线程消耗的时间,单位都是这个。

计算公式
(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//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

man-proc

Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解

Top中是如何取到Linux内核中的Hertz的?以及CPU使用率到底是怎么算出来的?

Docker 监控的一点想法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66748.html

相关文章

  • (一)线程发展历史

    摘要:从多线程的发展来看,可以操作系统的发展分为三个历史阶段真空管和穿孔卡片晶体管和批处理系统集成电路和多道程序设计最早的计算机只能解决简单的数学运算问题,比如正弦余弦等。我们用了比较长的篇幅介绍了进程线程发展的历史。 专题简介 作为一个合格的Java程序员,必须要对并发编程有一个深层次的了解,在很多互联网企业都会重点考察这一块。可能很多工作3年以上的Java程序员对于这一领域几乎没有太多研...

    noONE 评论0 收藏0
  • 王道操作系统(1-15)学习总结

    摘要:多道批处理系统操作系统引入中断,磁盘能够输出多道程序,并且程序可以通过操作系统来管理并发执行。输入完多道程序之后能够通过操作系统来进行调度,最后输出结果。分时操作系统以时间片为单位的轮流为每个用户作业服务。 ...

    amc 评论0 收藏0
  • 终于明白:有了线程,为什么还要有协程?

    摘要:每个进程的第一个线程都会随着该进程的启动而被创建,它们可以被称为其所属进程的主线程。因此,线程也被称为轻量级进程。与进程调度类似,在线程之间快速切换,制造了线程并行运行的假象。也就是说,线程之间是没有保护的。其中的指代的就是系统级线程。 并发的发展历史 其实,在早期计算机并没有包含操作系统,...

    不知名网友 评论0 收藏0
  • 进程与线程

    摘要:进程与线程进程和线程是操作系统的基本概念但是它们比较抽象不容易掌握。线程,有时被称为轻量进程,,是程序执行流的最小单元。 进程与线程 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。 有一个很好的类比,可以把它们解释地清晰易懂。 CPU 计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。 假定工厂的电力有限,一次...

    Jingbin_ 评论0 收藏0
  • Java 线程实现方式

    摘要:线程的可能实现方式基本上主流的操作系统都支持线程,也提供了线程的实现。使用用户线程和内核线程混合实现在这种混合实现下,既存在用户线程,也存在内核线程。 进程与线程 在传统的操作系统中,最核心的概念是进程,进程是对正在运行的程序的一个抽象。进程的存在让并行成为了可能,在一个操作系统中,允许运行着多个进程,这些进程看起来是同时在运行的。如果我们的计算机同时运行着 web 浏览器、电子邮件客...

    曹金海 评论0 收藏0
  • 深入理解Node.js 进程与线程(8000长文彻底搞懂)

    摘要:在单核系统之上我们采用单进程单线程的模式来开发。由进程来管理所有的子进程,主进程不负责具体的任务处理,主要工作是负责调度和管理。模块与模块总结无论是模块还是模块,为了解决实例单线程运行,无法利用多核的问题而出现的。 前言 进程与线程是一个程序员的必知概念,面试经常被问及,但是一些文章内容只是讲讲理论知识,可能一些小伙伴并没有真的理解,在实际开发中应用也比较少。本篇文章除了介绍概念,通过...

    Harpsichord1207 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<