先理解一下平均负载的含义:
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的进程数,也可以看成平均活跃进程数。
可运行状态的进程:
正在使用CPU或者正在等待CPU处理的进程,ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
不可中断状态的进程:
正处于不可以打断的内核态关键流程中的进程,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
不可中断状态是对程序的一种保护,要是程序在向磁盘读写数据被打断了,那么就有可能出现进程数据和磁盘数据不一致的情况。
需要注意的是平均负载与CPU的使用没有直接关系。还需要注意的是,看系统平均负载需要结合CPU的个数。
接下来使用uptime
结合数据说话:
23:11:42
表明现在的时间,29 days, 2:12
表明到现在为止,系统运行的时间,4 users
表明现在有4个用户登录系统,0.01, 0.02, 0.10
表明1分钟
的平均负载是0.01
,5分钟的平均负载是0.02
,15分钟
的平均负载是0.10
。使用man uptime
可以看到对于uptime
的解释。
uptime gives a one line display of the following information. The cur‐
rent time, how long the system has been running, how many users are
currently logged on, and the system load averages for the past 1, 5,
and 15 minutes.
This is the same information contained in the header line displayed by
w(1).
System load averages is the average number of processes that are either
in a runnable or uninterruptable state. A process in a runnable state
is either using the CPU or waiting to use the CPU. A process in unin‐
terruptable state is waiting for some I/O access, eg waiting for disk.
The averages are taken over the three time intervals. Load averages
are not normalized for the number of CPUs in a system, so a load aver‐
age of 1 means a single CPU system is loaded all the time while on a 4
CPU system it means it was idle 75% of the time.
Translate the above into Chinese
翻译过来的意思如下:
uptime
命令会以一行显示以下信息:当前时间,系统运行时间,当前登录的用户数,以及过去1分钟、5分钟和15分钟的系统负载平均值。这与 w(1) 命令显示的标题行中包含的信息相同。
系统负载平均值是可运行或不可中断状态的进程的平均数量。可运行状态的进程正在使用CPU或等待使用CPU。不可中断状态的进程正在等待某些I/O访问,例如等待磁盘。负载平均值是在这三个时间间隔内取得的。负载平均值并没有对系统中的CPU数量进行标准化,因此负载平均值为1表示单个CPU系统一直处于满负荷状态,而在4个CPU的系统中,表示系统75%的时间处于空闲状态。
最理想的状态状态就是平均活跃进程数等于CPU个数,这样的话,每一个CPU上都运行着一个进程。若平均负载是2的话,就需要看CPU的个数了。
CPU个数是1的话,意味着还有一半的进程竞争不到CPU。
CPU个数是2的话,意味着CPU正好被使用完,是理想中状态。
CPU个数是4的话,意味着CPU还有一半是空闲。
现实工作中,我们经常容易把平均负载和 CPU 使用率混淆,所以在这里也做一个区分。可能你会疑惑,既然平均负载代表的是活跃进程数,那平均负载高了,不就意味着 CPU 使用率高吗?
我们还是要回到平均负载的含义上来,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:
CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
此文章为9月Day 16学习笔记,内容来源于极客时间《Linux 性能优化实战》