Linux系统平均负载和CPU使用率的差异及联系

做为一个测试工程师,每当我们发现计算机变慢的时候,我们通常执行 uptime 或 top 命令,来了解系统的负载情况。或者使用相关可视化平台直接查看平均负载和CPU使用率。

那么这二者具体是什么呢?有什么关系呢?

先说平均负载,

标准定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。

  CPU 负载值在 Linux 系统中表示正在运行,处于可运行状态的平均作业数(读取一组与流程执行线程对应的机器语言的程序指令),或者非常重要,休眠但不可中断(不可交错的休眠状态))。也就是说,要计算 CPU 负载的值,只考虑正在运行或等待分配 CPU 时间的进程。不考虑正常的休眠过程(休眠状态),僵尸或停止的过程。

可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即 ps aux 命令下 STAT 处于 R 状态的进程。

不可中断状态的进程:处于内核态关键流程中的进程,且不可被打断,如等待硬件设备IO响应,ps 命令 D 状态的进程。

理想状态:每个cpu上都有一个活跃进程,即平均负载数等于cpu数。

过载值:平均负载高于cpu数量 70% 的时候。

再说cup使用率

CPU使用率定义:单位时间内cpu繁忙情况的统计。

  如果我们观察在给定时间间隔内通过CPU的不同进程,则利用率百分比将表示相对于CPU执行与每个进程相对应的指令的那个时间间隔的时间部分。但这种计算只运行的进程,而不是那些正在等待,无论它们是在队列(可运行状态)还是睡着但不可中断(例如在等待输入/输出操作的结束)被认为。
因此,这个指标可以让我们了解哪些进程最大程度地挤压CPU,但是如果系统状态过载或者未充分利用,则不能给出真实的系统状态图。

一个类比
上面还看太懂怎么办?没事,我们来看一个简单的类比例子。

先假设最简单的情况,你的计算机只有一个 CPU,所有的运算都必须由这个 CPU 来完成。

那么,我们不妨把这个 CPU 想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过。(很显然,这座桥只能单向通行。)

系统负载为 0,意味着大桥上一辆车也没有。

 

系统负载为 0.5,意味着大桥一半的路段有车。

系统负载为 1.0,意味着大桥的所有路段都有车,也就是说大桥已经"满"了。但是必须注意的是,直到此时大桥还是能顺畅通行的。

系统负载为 1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的 70%。以此类推,系统负载 2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负载 3.0,意味着等待上桥的车辆是桥面车辆的 2 倍。总之,当系统负载大于 1,后面的车辆就必须等待了;系统负载越大,过桥就必须等得越久。

CPU 的系统负载,基本上等同于上面的类比。大桥的通行能力,就是CPU 的最大工作量;桥梁上的车辆,就是一个个等待 CPU 处理的进程(process)。

如果CPU 每分钟最多处理100个进程,那么系统负载0.2,意味着CPU在这 1 分钟里只处理 20 个进程;系统负载 1.0,意味着 CPU 在这 1 分钟里正好处理 100 个进程;系统负载 1.7,意味着除了 CPU 正在处理的100 个进程以外,还有 70 个进程正排队等着CPU处理。

为了计算机顺畅运行,系统负载最好不要超过 1.0,这样就没有进程需要等待了,所有进程都能第一时间得到处理。很显然,1.0 是一个关键值,超过这个值,系统就不在最佳状态了,你要动手干预了。

  Linux系统平均负载和CPU使用率是我们查看服务器性能的关键指标,二者相互联系,又相辅相成。若是看单个指标,数据可能有误,建议同时查看。

 

posted @ 2019-08-26 16:24  留年216  阅读(1274)  评论(0编辑  收藏  举报