Linux中CPU负载和CPU使用率表示的含意

昨天查看Nagios警报信息,发现其中一台服务器CPU负载太重,机器为CentOS系统。信息以下:
 
2011-2-15 (星期二) 17:50
 
WARNING - load average: 9.73, 10.67, 10.49
  
 
还有前两个小时发出的警报信息:
 
2011-2-15 (星期二) 16:50
 
WARNING - load average: 10.52, 10.10, 10.06
 
2011-2-15 (星期二) 15:40
 
WARNING - load average: 8.27, 9.23, 9.48
  
 
1、警报信息的三个参数究竟是什么意思?
 
9.7三、10.6七、10.49分别表明前一分钟,五分钟,十五分钟的平均CPU负载,最重要的指标是最后一个数字,即前15分钟的平均CPU负载,这个数字越小越好。所谓CPU负载指的是一段时间内任务队列的长度,通俗的讲,就是一段时间内一共有多少任务在使用或等待使用CPU。
 
 
 
2、除了Nagios,还有哪些工具能够查看CPU负载?
 
可使用top命令、uptime命令,特别是top命令,功能强大,不只仅能够用来查看CPU负载。
 
 
 
3、CPU负载怎么理解?是否是CPU利用率?
 
这里要区别CPU负载和CPU利用率,它们是不一样的两个概念,但它们的信息能够在同一个top命令中进行显示。CPU利用率显示的是程序在运行期间实时占用的CPU百分比,而CPU负载显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就必定大。网上有篇文章举了一个有趣比喻,拿打电话来讲明二者的区别,我按本身的理解阐述一下。
 
某公用电话亭,有一我的在打电话,四我的在等待,每人限定使用电话一分钟,如有人一分钟以内没有打完电话,只能挂掉电话去排队,等待下一轮。电话在这里就至关于CPU,而正在或等待打电话的人就至关于任务数。
 
在电话亭使用过程当中,确定会有人打完电话走掉,有人没有打完电话而选择从新排队,更会有新增的人在这儿排队,这我的数的变化就至关于任务数的增减。为了统计平均负载状况,咱们5秒钟统计一次人数,并在第一、五、15分钟的时候对统计状况取平均值,从而造成第一、五、15分钟的平均负载。
 
有的人拿起电话就打,一直打完1分钟,而有的人可能前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。若是把电话看做CPU,人数看做任务,咱们就说前一我的(任务)的CPU利用率高,后一我的(任务)的CPU利用率低。
 
固然, CPU并不会在前三十秒工做,后三十秒歇着,只是说,有的程序涉及到大量的计算,因此CPU利用率就高,而有的程序牵涉到计算的部分不多,CPU利用率天然就低。但不管CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系。
 
 
 
4、了解了CPU负载的含义,咱们如何来下降服务器的CPU负载呢?
 
最简单办法的是更换性能更好的服务器,不要想着仅仅提升CPU的性能,那没有用,CPU要发挥出它最好的性能还须要其它软硬件的配合。
 
在服务器其它方面配置合理的状况下,CPU数量和CPU核心数(即内核数)都会影响到CPU负载,由于任务最终是要分配到CPU核心去处理的。两块CPU要比一块CPU好,双核要比单核好。
 
所以,咱们须要记住,除去CPU性能上的差别,CPU负载是基于内核数来计算的!有一个说法,“有多少内核,即有多少负载”。
 
 
 
5、那么,本文开头的CPU负载分担到每一个CPU上的负载是多少呢?那就要看我这台服务器有一共有多少个内核了。
 
Linux里有一个/proc目录,存放的是当前运行系统的虚拟映射,其中有一个文件为cpuinfo,这个文件里存放着CPU的信息。咱们能够直接打开查看,或者过滤关键字进行查看,由于文件内容比较多,因此通常咱们须要过滤关键字。
 
/proc/cpuinfo文件按逻辑CPU而非真实CPU分段落显示信息,每一个逻辑CPU的信息占用一个段落,第一个逻辑CPU标识从0开始。咱们首先要明白这一点,至于什么是逻辑CPU,下面会提到。要理解该文件中的CPU信息,有几个相关的概念要知道:
 
processor:逻辑CPU的标识
 
model name:真实CPU的型号信息
 
physical id:真实CPU和标识
 
cpu cores:真实CPU的内核数
 
 
 
>grep‘modelname′/proc/cpuinfo|uniqmodelname:Intel(R)Xeon(R)CPUE5320@1.86GHz>grep ‘physical id’ /proc/cpuinfo |sort |uniq |wc -l
 
2
 
$>grep ‘cpu cores’ /proc/cpuinfo |uniq
 
2
 
能够看出,该服务器CPU型号为Intel(R) Xeon(R) CPU E5320,双CPU,每一个CPU都是双核,至关于服务器有4个内核。
 
前面咱们说CPU负载是基于CPU内核数计算的,那么之前十五分钟的平均负载数10.49为例,咱们能够得出,这台服务器每一个CPU的负载为5.245,再分配到内核上,每一个内核的负载为2.6左右。
 
这个负载是不是合理的呢?那就要看理想CPU负载的标准是什么样子的了。
 
 
 
6、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如下就能够。
 
 
 
7、下面关于逻辑CPU的描述,所有来自网上:
 
如今的服务器通常都使用了“超线程”(Hyper-Threading,简称HT)技术来提升CPU的性能。超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU同样在同一时间执行两个线程。
 
虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每各CPU都具备独立的资源。当两个线程都同时须要某一个资源时,其中一个要暂时中止,并让出资源,直到这些资源闲置后才能继续。所以超线程的性能并不等于两颗CPU的性能。
 
具备超线程技术的CPU还有一些其它方面的限制。ios

相关文章
相关标签/搜索