计算机各个组件之间的速度往往很不均衡,比如 CPU 和硬盘,比兔子和乌龟的速度差还大,那么按照我们前面介绍的木桶理论,可以说这个系统是存在着短板的。
当系统存在短板时,就会对性能造成较大的负面影响,比如当 CPU 的负载特别高时,任务就会排队,不能及时执行。而其中,CPU、内存、I/O 这三个系统组件,又往往容易成为瓶颈,所以接下来我会对这三个方面分别进行讲解。
CPU
首先介绍计算机中最重要的计算组件中央处理器 CPU,围绕 CPU 一般我们可以:
-
通过 top 命令,来观测 CPU 的性能;
-
通过负载,评估 CPU 任务执行的排队情况;
-
通过 vmstat,看 CPU 的繁忙程度。
具体情况如下。
1.top 命令 —— CPU 性能
如下图,当进入 top 命令后,按 1 键即可看到每核 CPU 的运行指标和详细性能。
CPU 的使用有多个维度的指标,下面分别说明:
-
us 用户态所占用的 CPU 百分比,即引用程序所耗费的 CPU;
-
sy 内核态所占用的 CPU 百分比,需要配合 vmstat 命令,查看上下文切换是否频繁;
-
ni 高优先级应用所占用的 CPU 百分比;
-
wa 等待 I/O 设备所占用的 CPU 百分比,经常使用它来判断 I/O 问题,过高输入输出设备可能存在非常明显的瓶颈;
-
hi 硬中断所占用的 CPU 百分比;
-
si 软中断所占用的 CPU 百分比;
-
st 在平常的服务器上这个值很少发生变动,因为它测量的是宿主机对虚拟机的影响,即虚拟机等待宿主机 CPU 的时间占比,这在一些超卖的云服务器上,经常发生;
-
id 空闲 CPU 百分比。
一般地,我们比较关注空闲 CPU 的百分比,它可以从整体上体现出来 CPU 的利用情况。
2.负载 —— CPU 任务排队情况
如果我们评估 CPU 任务执行的排队情况,那么需要通过负载(load)来完成。除了 top 命令,使用 uptime 命令也能够查看负载情况,load 的效果是一样的,分别显示了最近 1min、5min、15min 的数值。
如上图所示,以单核操作系统为例,将 CPU 资源抽象成一条单向行驶的马路,则会发生以下三种情况:
-
马路上的车只有 4 辆,车辆畅通无阻,load 大约是 0.5;
-
马路上的车有 8 辆,正好能首尾相接安全通过,此时 load 大约为 1;