我们在使用top命令查看系统的资源使用情况时,会看到loadaverage,如下图所示。它表示系统在1、5、15分钟时的平均工作负载。那么什么是负载?它与CPU利用率有什么关系?loadaverage:平均系统负载是CPU的负载。它包含的信息不是CPU使用状态,而是一段时间内CPU正在处理和等待CPU处理的进程数总和的统计信息,即长度的统计信息CPU使用队列。这个数字越低越好。01.CPUload和CPUutilization的区别CPUutilization:显示程序在运行过程中实时占用的CPU百分比CPUload:显示一段时间内正在使用和等待使用CPU的任务的平均数。CPU使用率高并不意味着负载一定很重。举个例子:如果我有一个程序,需要一直使用CPU的计算功能,那么此时CPU的使用率可能会达到100%,但CPU的工作量却接近于“1”,因为CPU只负责一份工作嘛!如果同时执行两个这样的程序怎么办?CPU使用率依然是100%,但是工作负载变成了2。也就是说,当CPU的工作负载变大的时候,就意味着CPU必须在不同的任务之间进行频繁的工作切换。例如:网上的一篇文章给出了一个有趣的类比,用一个电话来说明两者的区别,我就按照自己的理解来解释一下。一个公用电话亭里,一个人在打电话,四个人在等。每个人只能使用电话一分钟。如果有人在一分钟内没有接完电话,就只能挂断电话去排队等下一轮。这里的电话就相当于CPU,正在或者正在等电话的人就相当于任务的数量。在电话亭的使用过程中,肯定会有人打完电话就走,有的人电话没打完又会选择重新排队,这里还会有新的人排队。这个数量的变化相当于任务数量的增减。为了统计平均负载,我们每5分钟统计一次人数,将第1、5、15分钟的统计数据取平均值,形成第1、5、15分钟的平均负载。有的人拿起电话一分钟就打电话,而有的人可能前30秒还在找电话号码或者犹豫要不要打电话,最后30秒才真正打电话。如果把手机看成一个CPU,把人数看成一个任务,我们说前者(任务)的CPU使用率高,后者的人(任务)的CPU使用率是低的。当然CPU不会前30秒不工作,后30秒休息。就是说有的程序计算量大,CPU使用率高,有的程序计算量少,CPU利用率自然就低了。但是CPU利用率是高还是低,跟后面有多少任务排队是没有关系的。02.什么是理想负载?这是有争议的,各有各的看法。我个人认同CPU负载小于等于0.5为理想状态。不管某个CPU的性能有多好,一秒钟能处理多少任务,我们都可以认为无所谓,尽管事实并非如此。在评估CPU负载时,我们只统计任务队列长度,以5分钟为单位。如果每5分钟统计一次,发现任务队列长度为1,那么CPU负载为1。如果我们只有单核CPU,负载一直为1,也就是说没有任务排队,这不是坏的。但是我的服务器是双核和CPU,也就是4核。如果每个核心的负载为1,那么总负载就是4。也就是说,如果我的服务器的CPU负载长期保持在4左右,是可以接受的。但是每个核心1个负载并不理想!这意味着我们的CPU总是忙碌而不是空闲。网上说理想状态是每个核心的负载在0.7左右。我同意。将0.7乘以核心数即可得到服务器的理想CPU负载。比如我的服务器负载在3.0以下。03.如何降低服务器的CPU负载?最简单的方法是更换性能更好的服务器。不要只想着提高CPU的性能。合作。在服务器其他方面配置合理的情况下,CPU的数量和CPU核数(即核数)都会影响CPU的负载,因为任务最终都是分配给CPU核来处理的。两个CPU比一个CPU好,双核比单核好。因此,我们需要记住,除了CPU性能的差异外,CPU负载是根据核心数计算的!有句话叫“有多少核,就有多少负载”。04.理想的CPU使用率是多少?以往,CPU使用率往往被我们外行认为是判断机器是否达到满负荷的标准。看到CPU使用率一直在60-80%。有一个瓶颈。
