CPU平均负载是最常见的体现CPU负载情况的指标,通常可以使用top
或者uptime
命令查询。
uptime命令结果如下
11:02:24 up 1 day ,7:13, 2 users, load average: 0.27,0.10,0.07
输出结果的各部分含义如下:
11:02:24
:表示当前时间,11点02分24秒
up 1 day,7:13
:表示系统运行时间,运行了1天,7个小时13分钟
2 users
:系统登陆用户数,当前有2个登陆用户,数据来源于/var/run/utmp
load average:0.27,0.10,0.07
:表示系统CPU过去1分钟、5分钟、15分钟的平均负载。这三个值应该结合起来分析,例如如果15分钟>5分钟>1分钟,则代表CPU平均负载在不断下降,反之CPU负载在不断上升。
top
命令输出的结果第一行与uptime
命令输出结果是一致的,由于top
命令能输出更多系统的信息,一般使用中建议直接使用top
命令即可。
知道如何查询CPU的平均负载以后,我们还需要深刻理解CPU平均负载的含义,才能用于进行系统的性能优化以及问题定位。
CPU平均负载:平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。
可运行状态进程:指正在使用 CPU 或者正在等待 CPU 的进程,我们使用命令ps aux
输出结果中STAT列值为 R 状态(Running 或 Runnable)的进程。
不可中断状态进程:正处于内核态关键流程中的进程,并且这些流程是不可打断的,称为Uninterruptible Sleep。最常见的不可中断进程是等待硬件设备的 I/O 响应,比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。也正是由于这个原因,这种进程也被称为Disk Sleep进程,使用命令ps aux
命令,输出结果中STAT列中看到状态值为D的进程就是不可中断状态进程。
平均负载最理想的情况等于CPU总核数。但是实际生产上如果CPU负载超过CPU总核数的70%,就需要重点关注了,特别是有不断上升的趋势的时候。
物理CPU总数可以通过以下命令获得:
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
CPU总核数可以通过以下命令获得:
cat /proc/cpuinfo| grep "processor"| wc -l
或者grep 'model name' /proc/cpuinfo | wc -l
每个物理CPU的核数
cat /proc/cpuinfo| grep "cpu cores"| uniq
查看CPU详细信息可以使用lscpu
命令