首页 > 技术文章 > 如何查看Linux的CPU负载

setevn 2018-04-06 23:36 原文

哪些工具可以查看 CPU 负载?

可以使用 top 命令、uptime 命令,特别是 top 命令,功能强大,不仅仅可以用来查看 CPU 负载。

CPU 负载怎么理解?是不是 CPU 利用率?

    要区别 CPU 负载和 CPU 利用率,它们是不同的两个概念,但它们的信息可以在同一个 top 命令中进行显示。CPU 利用率显示的是程序在运行期间实时占用的 CPU 百分比,而 CPU 负载显示的是一段时间内正在使用和等待使用 CPU 的平均任务数。CPU 利用率高,并不意味着负载就一定大。网上有篇文章举了一个有趣比喻,拿打电话来说明两者的区别,我按自己的理解阐述一下。 某公用电话亭,有一个人在打电话,四个人在等待,每人限定使用电话一分钟,若有人一分钟之内没有打完电话,只能挂掉电话去排队,等待下一轮。电话在这里就相当于 CPU,而正在或等待打电话的人就相当于任务数。 在电话亭使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,更会有新增的人在这儿排队,这个人数的变化就相当于任务数的增减。为了统计平均负载情况,我们 5 秒钟统计一次人数,并在第 1、5、15 分钟的时候对统计情况取平均值,从而形成第 1、5、15 分钟的平均负载。 有的人拿起电话就打,一直打完 1 分钟,而有的人可能前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。如果把电话看作 CPU,人数看作任务,我们就说前一个人(任务)的 CPU 利用率高,后一个人(任务)的 CPU 利用率低。 当然, CPU 并不会在前三十秒工作,后三十秒歇着,只是说,有的程序涉及到大量的计算,所以 CPU 利用率就高,而有的程序牵涉到计算的部分很少,CPU 利用率自然就低。但无论 CPU 的利用率是高是低,跟后面有多少任务在排队没有必然关系。

如何来降低服务器的 CPU 负载呢?

最简单办法的是更换性能更好的服务器,不要想着仅仅提高 CPU 的性能,那没有用,CPU 要发挥出它最好的性能还需要其它软硬件的配合。 在服务器其它方面配置合理的情况下,CPU 数量和 CPU 核心数(即内核数)都会影响到 CPU 负载,因为任务最终是要分配到 CPU 核心去处理的。两块 CPU 要比一块 CPU 好,双核要比单核好。 因此,我们需要记住,除去 CPU 性能上的差异,CPU 负载是基于内核数来计算的!有一个说法,“有多少内核,即有多少负载”。

CPU 负载为多少才算比较理想?

个人比较赞同 CPU 负载小于等于 0.7 算是一种理想状态。 不管某个 CPU 的性能有多好,1 秒钟能处理多少任务,我们可以认为它无关紧要,虽然事实并非如此。在评估 CPU 负载时,我们只以 5 秒钟为单位为统计任务队列长度。如果每隔 5 秒钟统计的时候,发现任务队列长度都是 1,那么 CPU 负载就为 1。假如我们只有一个单核的 CPU,负载一直为 1,意味着没有任务在排队,还不错。 上面提到的我那台服务器,是双核又 CPU,等于是有 4 个内核,每个内核的负载为 1 的话,总负载为 4。这就是说,如果我那台服务器的 CPU 负载长期保持在 4 左右,还可以接受。但实际上 CPU 负载已经达到 9 以上了,所以就很麻烦了。  但是每个内核的负载为 1,并不能算是一种理想状态!这意味着我们的 CPU 一直很忙,不得清闲。网上有说理想的状态是每个内核的负载为 0.7 左右,我比较赞同,0.7 乘以内核数,得出服务器理想的CPU 负载,比如我这台服务器,负载在 3.0 以下就可以。

 

#查看CPU型号:  

$>grep 'model name' /proc/cpuinfo |uniq  

 

 model name : Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz

 

#查看CPU物理个数  

 

$>grep 'physical id' /proc/cpuinfo |sort |uniq |wc -l  

 

0

 

#查看单个CPU是几核的  

 

$>grep 'cpu cores' /proc/cpuinfo |uniq  

 

 

 

推荐阅读