不一定准确,只是个人的分析
CPU使用率
mpstat -u
通过查看每个CPU核心的用户进程使用时间(%usr)来计算CPU使用率的。它只考虑了用户进程的CPU使用情况,而不考虑内核进程的CPU使用情况。
这种计算方式会更大
CPU使用率=2.19+4.57=6.76
Top
将用户进程(us)和内核进程(sy)的CPU使用时间相加来计算的。它考虑了所有进程的CPU使用情况。
举例
CPU使用率 = 100 * (user + nice + system) / (user + nice + system + idle + iowait + irq + softirq)=3.2
- %CPU:进程在CPU上的占用率,它是用户态、内核态和nice值的总和除以总的CPU时间。
- user:进程在用户态运行的时间。 用户时间
- nice:进程以较低优先级运行的时间。 用户时间
- system:进程在内核态运行的时间。 系统时间
- idle:CPU处于空闲状态的时间。 空闲时间
- iowait:CPU等待IO操作完成的时间。 空闲时间
- irq:CPU处理硬件中断的时间。系统时间的一部分
- softirq:CPU处理软件中断的时间。系统时间的一部分
Psutil的计算方式
CPU忙时间/总CPU时间*100%
CPU忙时间=CPU时间差-guest虚拟机时间-idle-iowait
虚拟机的CPU时间是由虚拟机监控程序(VMM)来维护的
- 计算CPU时间差,间隔是1秒
官方->为了准确起见,建议在两次调用之间至少间隔 0.1
秒再次调用此函数。
CPU时间差= CPU时间2-CPU时间1
CPU时间=/proc/stat下
分别对应'user', 'nice', 'system', 'idle', 'iowait', 'irq', 'softirq'
通过每个cpu的值除以cpu时钟得到,是一个集合
CPU时钟是系统时钟每秒钟的滴答数,通过getconf CLK_TCK得到
- 计算总的CPU时间, 用户时间(user)和优先级较低的进程时间(nice)已经包含了虚拟机时间(guest)的计算
总CPU时间= CPU时间差-guest虚拟机时间
例:
截图两次后
针对cpu时间差
User=28,nice=0,system=28,idle=4005,iowait=1,irq=4,softirq=2
不要idle和iowait,求和user+system+irq+softirq=28+28+4+2=62
总的CPU时间是4067
两者相除就是62/4067=1.5%
实际上还要分子分母同除时间间隔,我大概是1.5秒到2秒的时间。
注意以上不一定准确!!!待各位纠正
标签:iowait,psutil,时间,进程,使用率,CPU,nice From: https://www.cnblogs.com/immersed-in-the-deep-sea/p/18294595