当你在 Linux 发行版,例如 Ubuntu,Debian,CentOS 运行 top 命令时,通常会看到以下结果。

top - 07:58:58 up 1:21, 1 user, load average: 0.82, 0.73, 0.55 Tasks: 293 total, 1 running, 292 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.8 us, 0.8 sy , ....

你可能会不理解 load average%cpu 。然而网络很多都是简单介绍,说明 top 命令各个数值的含义。

平均负载

平均负载是评估一段时间内在 Linux 内核运行队列中有多少任务正在等待运行,不只是 CPU,也包括磁盘的活动。

你可能会问这是否意味着 .83 个任务正在等待运行?它为什么不是十进制数?为什么会有三个不同 0.83 0.73, 0.55 数值?

%CPU

这表示 x 秒内 CPU 工作了多长时间。例如 CPU 一直显示 60%,这意味着过去 x 秒内 cpu 工作时间占了 x秒的 60%。

你可能这样疑惑,这样理解是正确的吗?如果是 %Cpu(s):  0.8 us 又表示什么。

另外,如果你的 CPU 4 个核心 ,并且 %CPU 显示 50%,这是否意味着所有核心都在 50% 工作,或者 2 个 CPU 都在 100% 工作?

理解平均负载

Load Average: 0.83 0.73, 0.55

负载是系统执行的计算工作量的度量,这三个值是一个时间间隔内的平均负载。时间间隔为最后 1 分钟、5 分钟和 15 分钟。

平均负载计算为指数移动平均数。如果您愿意,可以深入了解并阅读检查平均负载

在单核心 CPU 系统

平均负载值在一个范围内变化。对于单核系统,值 0.83 表示您的 CPU 在最后一分钟的时间 83% 的时间都在工作 。

1.0 表示您的 CPU 所有时间都在工作。系统就会因为增加一点额外的工作而超载运行。

大于 1.0 的值意味着 CPU 超出它可以处理的范围。虽然并对CPU 没有什么坏处,它只是意味着有更多的进程在等待 CPU 时间。您会看到计算机运行缓慢。

在多核心 CPU 系统

对于多核心 CPU 系统,您可以将平均负载除拥有的 CPU 核心数。例如,CPU 的平均负载为 0.83,您需要将 0.83 除 4  0.83 / 4 ,也就是 0.2075 或者百分比 20.75% = (0.83 / 4) * 100  。

对于四核系统,如果平均负载大于值 4.0,则表明所有核心都处于 100%,任何过载都会导致进程等待 CPU 时间。

当您超过最大 CPU 负载时,就会发生过载。作为过载的平均负载读起来可能有点混乱,因为它基于您的 CPU 核心。

如果你有一个四核心的 CPU,在平均负载值 4.0 之前不会载出现过载,除非超过4.0 值。

如果负载平均的第一个值是 5.50,那将意味着您的系统过载 150% ,最后一分钟平均有 1.5 个进程必须等待 CPU 时间。

理解%Cpu(s)

%Cpu(s):0.8us,0.8sy....

此部分显示 CPU 的使用情况。每个后缀代都有自己的含义,并表示 CPU 在这些类型的任务消耗了多少时间。如果您将该行的所有数字相加,则总和是 100%。

  • us 是用户进程占 CPU 的百分比
  • sy 是系统进程的 CPU 百分比
  • ni 是进程优先级
  • id 是未使用的 CPU 百分比
  • wa 是 CPU 等待 I/O 操作的百分比
  • hi 是服务于硬件中断 CPU百分比
  • si 是服务于软件中断的 CPU 百分比
  • st 在虚拟化环境中,一部分 CPU 资源分配给每个虚拟机 (VM)。操作系统检测到它何时有工作要做,但它无法执行它们,因为 CPU 正忙于某个 VM。以这种方式丢失的时间量就是窃取时间。

结论

至此,你已理解理解平均负载和 CPU 百分比,你应该可以通过这些值评估你的 Linux 服务器系统的性能以及负载情况。

并根据这些值来确定是否要升级 CPU 和磁盘等硬件或者优化你的当前系统的负载。如果您有任何问题或反馈,请随时发表评论。