Linux-CPU优化之平均负载率
一、平均负载率定义
平均负载是指单位时间内,系统处于可运行状态 和不可中断状态 的平均进程数,也就是平均活跃进程数,它和CPU 使用率并没有直接关系。
可运行状态的进程:是指正在使用 CPU 或者正在等待CPU 的进程,也就是我们常用 ps 命令看到的,处于R 状态(Running 或Runnable)的进程。
不可中断状态的进程:是正处于内核态关键流程中的进程,并且这些流程是不可打断的, 比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态 (Uninterruptible Sleep,也称为 Disk Sleep)的进程。(比如,当一个进程向磁盘读写数据时为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。 所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。)
ps aux可以查看线程状态:
二、uptime命令查看系统负载
执行uptime来了解系统的负载情况。
结果解析:
如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。
如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦 1 分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了。
如果需查看动态的进线程状态信息可以通过top命令。
三、平均负载为多少时合理
平均负载最理想的情况是等于CPU个数。所以在评判平均负载时,首先你要知道系统有几个CPU,从文件 /proc/cpuinfo 中读取CPU个数,为什么呢?
1、cpu信息记录在/proc/cpuinfo中
2、Linux中的Top相当于win系统下的任务管理器,也可以用来查询
3、CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数
4、总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数
打开/proc/cpuinfo文件,可以看到:
通过shell命令组合可以得到CPU个数等信息,比如:
1、查询命令查看CPU信息(型号) :cat /proc/cpuinfo | grep name | cut -f2 -d: #| uniq -c
2、 查看物理CPU个数:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
3、 查看每个物理CPU中core的个数(即核数):cat /proc/cpuinfo| grep "cpu cores"| uniq
4、查看逻辑CPU的个数:cat /proc/cpuinfo | grep "processor"| wc -l
当平均负载比 CPU个数还大的时候,系统已经出现 了过载。在观察负载数据时,我们有三个时间点的数据,因此都要看。三个不同时间间隔的平均值其实给我们提供了分析系统负载趋势的数据来源,让我们能更全面、更立体地理解目前的负载状况。
举个例子:假设我们在一个单 CPU 系统上看到平均负载为 1.88,0.70,6.76, 那么说明在过去 1 分钟内,系统有 188% 的超载,而在 15 分钟内,有 676% 的超载,从整体趋势来看,系统的负载在降低。当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了(70% 这个数字并不是绝对的,最推荐的方法)。
四、平均负载和cpu使用率关系
经常性地容易把平均负载和 CPU 使用率混淆,来区分一下:
虽然平均负载代表的是活跃进程数,那平均负载高了,不就意味着 CPU 使 用率高吗?回到平均负载的含义上来,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。而CPU使用率,是单位时间内CPU繁忙情况的统计,跟平均负载并不一定完全对应。
比如: