当你在 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 和磁盘等硬件或者优化你的当前系统的负载。如果您有任何问题或反馈,请随时发表评论。