2021 Resolutions  • • •  Rust、Golang 还是 Swift ?       all posts in Archive

CPU Load

What is Load Averages

系统负载 ( Load Averages ) 以前一直觉得是系统性能的整体评价,不过其实当然没有这么智能,它描述的只是CPU的压力状态信息。它是当前处理的和等待CPU处理的一段时间内,进程数之和的统计信息,即CPU使用的队列长度统计信息。

How to check Load Averages

常用的工具有比如,uptime,top 和 htop … 看到的信息一个比一个「智能」,不过大概都是类似的,比如:

22:54  up 9 days, 12:25, 4 users, load averages: 1.58 1.79 2.17

Min & Max of Load Averages

首先来关注一下最大值和最小值。最小值当然是 0 了,就是完全没有用呗。最大值就取决于 CPU 的配置了。如果你只有一个单核CPU,那么上限就是 1 。如果是这样,刚才我上面的数据 load averages: 1.58 1.79 2.17 来看,已经大于1,显然是爆表了。

如果是多个CPU,或者多核,就不一样了。当然这两种情况其实不完全相同,有些微妙的性能区别,但是我们可以简单理解为最后多核的总数量,就是 Load Averages 的上限。

CPU Core Count

要查看内核数量,在 Linux 上,可以用命令:

$ grep -c 'model name' /proc/cpuinfo

如果是在 MacOS 上,我们可以从系统信息里看到:

Apple Icon Menu > About This Mac > System Report > Hardware. 

Number of Processors:	1
Total Number of Cores:	4

或者使用命令:

$ sysctl hw.physicalcpu
hw.physicalcpu: 4

What value is right ?

知道了最大值和最小值,可什么样的数值是合理的呢?还是看看上面的数据:

load averages: 1.58 1.79 2.17

这三个数分别对应的是1分钟,5分钟和15分钟的数据。我们应该主要关注的是后面5分钟和15分钟的数据。数值当然是越低越好,不过具体是多低才合理呢?最大又是多大呢?我们用单核的情况来说明的话:

understanding-load-averages

当 1.7 的时候,就意味着系统已经 over loaded,请求需要等待了。据运营的经验说 0.7 就开始要想想发生了什么,需要调整了。并不是 1 才是完美的状况。

至于多核的情况,用这个类比调整就好了。

Reference

Understanding Linux CPU Load - when should you be worried?