CPU的使用率和负载的区别

CPU的使用率和负载的区别0x01CPU 使用率这个比较好理解 先来说说这个概念

大家好,欢迎来到IT知识分享网。

0x01 CPU使用率

这个比较好理解,先来说说这个概念。使用率其实也就是一段时间内 使用时间/总时间

直接说CPU的使用率计算方式吧:

CPU在t1和t2时间内的使用率=CPU非空闲时间/CPU总时间*100%=(1-CPU的空闲时间/CPU总时间)*100%

0x02 CPU负载

计算方式
  • 移动平均可抚平短期波动,反映出长期趋势或周期。数学上,移动平均可视为一种卷积。
  • 各数值的加权影响力随时间而指数式递减,越近期的数据加权影响力越重,但较旧的数据也给予一定的加权值。

总结一下就是这个统计算法不仅考虑了短期也能反映长期趋势,不仅计算了近期的值还考虑的旧的数据。

unsigned long avenrun[3]; static inline void calc_load(unsigned long ticks) { unsigned long active_tasks; /* fixed-point */ static int count = LOAD_FREQ; count -= ticks; if (count < 0) { count += LOAD_FREQ; active_tasks = count_active_tasks(); //注意这个函数!! CALC_LOAD(avenrun[0], EXP_1, active_tasks); CALC_LOAD(avenrun[1], EXP_5, active_tasks); CALC_LOAD(avenrun[2], EXP_15, active_tasks); } } 

真正的计算公式:

#define FSHIFT 11 /* nr of bits of precision */ #define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */ #define LOAD_FREQ (5*HZ) /* 5 sec intervals */ #define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */ #define EXP_5 2014 /* 1/exp(5sec/5min) */ #define EXP_15 2037 /* 1/exp(5sec/15min) */ #define CALC_LOAD(load,exp,n) \ load *= exp; \ load += n*(FIXED_1-exp); \ load >>= FSHIFT; 
/* * Either called from update_cpu_load() or from a cpu going idle */ static void calc_load_account_active(struct rq *this_rq) { long nr_active, delta; nr_active = this_rq->nr_running; //记录在cpu上运行的进程数 nr_active += (long) this_rq->nr_uninterruptible; //记录不可中断的进程数 if (nr_active != this_rq->calc_load_active) { delta = nr_active - this_rq->calc_load_active; this_rq->calc_load_active = nr_active; atomic_long_add(delta, &calc_load_tasks); } } 
  • 大多数的Unix系统中的负载只是记录那些处在运行状态和可运行状态的进程,但是Linux有所不同,它会包含那些不可中断的处于睡眠状态的进程。这时当这些进程由于I/O的阻塞而不能够运行,就可能显著的增加cpu的负载。所以在Unix和Linux下的cpu的负载的计算方法是不一样的,在设定监测值的时候也需要特别考率。
  • Linux记录cpu负载的时候是将cpu队列中的运行进程数和不可中断进程数都统计在内的,这样在对cpu负载分析的时候就需要考虑不可中断的进程的情况

所以这个函数才是重点啊:在分析机器负载过高的时候,除了需要关注那些活跃的进程,还需要关注那些由于I/O的阻塞变成不可中断状态的进程。很多时候机器负载突然飙升可能就是IO引起的。
至于load的算法了解就行。

这个状态一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。kill -9 也无法杀死

负载值大小

机器过载的话,一般就变得很卡,基本都会影响到上面的服务了,要很重视。

0x03 负载和使用率

  1. 高cpu使用率时,负载不一定很高
    一个机器48个核如果全100%的使用率,那么整个机器使用率是100%,但是负载也可能只是48刚好满负载而已。
  2. 高负载的时候,cpu使用率不一定高
    可能由于多个进程运行不可中断的IO,导致活跃进程数量增加,这个时候负载会飚的很高,但是cpu可能很低

0x04 举个栗子

r:表示运行和等待CPU时间片的进程数

可以看见已经很高了,爆表了。

find / -name "" 

OK!,问题找到。本来只需要一个这样的脚本跑。其他的都杀了

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132030.html

(0)
上一篇 2025-08-03 17:33
下一篇 2025-08-03 17:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信