`
wayne173
  • 浏览: 362433 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux里的CPU负载

阅读更多
昨天查看Nagios警报信息,发现其中一台服务器CPU负载过重,机器为CentOS系统。信息如下:
  1. 2011-2-15 (星期二) 17:50
  2. WARNING - load average: 9.73, 10.67, 10.49
还有前两个小时发出的警报信息:
  1. 2011-2-15 (星期二) 16:50
  2. WARNING - load average: 10.52, 10.10, 10.06
  1. 2011-2-15 (星期二) 15:40
  2. WARNING - load average: 8.27, 9.23, 9.48
 
一、警报信息的三个参数到底是什么意思?
9.7310.6710.49分别代表前一分钟,五分钟,十五分钟的平均CPU负载,最重要的指标是最后一个数字,即前15分钟的平均CPU负载,这个数字越小越好。所谓CPU负载指的是一段时间内任务队列的长度,通俗的讲,就是一段时间内一共有多少任务在使用或等待使用CPU
 
二、除了Nagios,还有哪些工具可以查看CPU负载?
可以使用top命令、uptime命令,特别是top命令,功能强大,不仅仅可以用来查看CPU负载。
 
三、CPU负载怎么理解?是不是CPU利用率?
这里要区别CPU负载和CPU利用率,它们是不同的两个概念,但它们的信息可以在同一个top命令中进行显示。CPU利用率显示的是程序在运行期间实时占用的CPU百分比,而CPU负载显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。网上有篇文章举了一个有趣比喻,拿打电话来说明两者的区别,我按自己的理解阐述一下。
某公用电话亭,有一个人在打电话,四个人在等待,每人限定使用电话一分钟,若有人一分钟之内没有打完电话,只能挂掉电话去排队,等待下一轮。电话在这里就相当于CPU,而正在或等待打电话的人就相当于任务数。
在电话亭使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,更会有新增的人在这儿排队,这个人数的变化就相当于任务数的增减。为了统计平均负载情况,我们5秒钟统计一次人数,并在第1515分钟的时候对统计情况取平均值,从而形成第1515分钟的平均负载。
有的人拿起电话就打,一直打完1分钟,而有的人可能前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。如果把电话看作CPU,人数看作任务,我们就说前一个人(任务)的CPU利用率高,后一个人(任务)的CPU利用率低。
当然, CPU并不会在前三十秒工作,后三十秒歇着,只是说,有的程序涉及到大量的计算,所以CPU利用率就高,而有的程序牵涉到计算的部分很少,CPU利用率自然就低。但无论CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系。
 
四、了解了CPU负载的含义,我们如何来降低服务器的CPU负载呢?
最简单办法的是更换性能更好的服务器,不要想着仅仅提高CPU的性能,那没有用,CPU要发挥出它最好的性能还需要其它软硬件的配合。
在服务器其它方面配置合理的情况下,CPU数量和CPU核心数(即内核数)都会影响到CPU负载,因为任务最终是要分配到CPU核心去处理的。两块CPU要比一块CPU好,双核要比单核好。
因此,我们需要记住,除去CPU性能上的差异,CPU负载是基于内核数来计算的!有一个说法,“有多少内核,即有多少负载”。
 
五、那么,本文开头的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的内核数
 
  1. $>grep ‘model name’ /proc/cpuinfo |uniq
  2. model name : Intel(R) Xeon(R) CPU E5320 @ 1.86GHz
  1. $>grep ‘physical id’ /proc/cpuinfo |sort |uniq |wc -l
  2. 2
  1. $>grep ‘cpu cores’ /proc/cpuinfo |uniq
  2. 2
可以看出,该服务器CPU型号为Intel(R) Xeon(R) CPU E5320,双CPU,每个CPU都是双核,相当于服务器有4个内核。
前面我们说CPU负载是基于CPU内核数计算的,那么以前十五分钟的平均负载数10.49为例,我们可以得出,这台服务器每个CPU的负载为5.245,再分配到内核上,每个内核的负载为2.6左右。
这个负载是否是合理的呢?那就要看理想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的描述,全部来自网上:
现在的服务器一般都使用了“超线程”(Hyper-Threading,简称HT)技术来提高CPU的性能。超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程。
虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每各CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。
具有超线程技术的CPU还有一些其它方面的限制。
 
八、学习过程中参考了下列文档,在此一并感谢:
http://www.gracecode.com/archives/2973/
http://xuev.blogbus.com/logs/37835586.html
 
尊重原创
分享到:
评论

相关推荐

    linux 排查cpu负载过高异常.docx

    在Linux系统中,CPU负载过高可能会导致系统的性能下降,影响应用程序的正常运行。排查CPU负载过高异常是一项重要的系统维护任务。以下是一套详细的步骤来帮助你定位并解决这个问题。 首先,我们使用`top`命令来找到...

    Linux内核《CPU负载计算》

    在Linux操作系统中,CPU负载是一个关键的性能指标,用于评估系统的繁忙程度。负载计算涉及到内核调度器的工作,它是理解和优化系统性能的重要环节。本文将深入探讨CPU负载的计算方法,以及它在Linux内核中的实现。 ...

    Linux CPU满负载压力测试

    压缩包中的`cpustress`是一个用于产生CPU负载的工具。它能够模拟多个线程,让CPU处于高负荷状态,以便观察系统在极限条件下的表现。通过调整参数,我们可以控制CPU的负载程度,例如创建不同数量的执行线程,或者设置...

    CPU负载监控脚本代码.docx

    CPU负载监控脚本代码 基于给定的文件信息,我们可以总结出以下知识点: 1. Shell脚本编程:该脚本代码使用bash shell脚本语言编写,用于监控服务器的CPU负载。 Shell脚本是一种特殊的编程语言,用于在Unix/Linux...

    Linux下cpu负荷测试代码

    测试cpu负荷性能的原理主要是通过求PI的小数点后面的位数来分析的

    mysql CPU高负载问题排查

    MySQL导致的CPU高负载问题  今天下午发现了一个MySQL导致的向上服务器负载高的问题,事情的背景如下:  在某个新服务器上,新建了一个MySQL的实例,该服务器上面只有MySQL这一个进程,但是CPU的负载却居高不下,...

    linux系统使服务器cpu负载到达指定的阀值,基于go语言编写,送上源码 本人纯菜鸟,不对的地方还请大佬们指正

    在Linux系统管理中,CPU负载是一个重要的性能指标,它反映了系统在单位时间内处理任务的能力。当服务器CPU负载过高时,可能会导致系统响应速度减慢,影响服务的正常运行。Go语言,作为一门现代化的编程语言,因其...

    Linux下如何查看某一进程的CPU占用率_linux进程cpu使用率.zip

    对于Solaris系统,`prstat`命令提供了类似的功能,而在某些Linux发行版中,`vmstat`命令可以给出系统级的统计信息,虽然不能直接显示单个进程的CPU使用率,但可以用来分析整个系统的CPU负载。 理解这些命令的使用...

    Linux查看CPU和内存使用情况

    ### Linux查看CPU和内存使用情况详解 在Linux系统管理中,了解CPU和内存的使用情况是至关重要的。这不仅有助于日常的系统监控,还能在问题出现时迅速定位并解决。本文将详细介绍如何在Linux环境下使用`top`命令查看...

    LoadRunner监控到的Linux服务器CPU的一些主要指标说明.pdf

    CPU Load 是指 CPU 可以并行处理的任务数,那么就是“CPU 个数 * 核数”,如果 CPU Load 等于 CPU 个数 * 核数,那么就是说 CPU 正好满负载。 十、 analysis 通过 LoadRunner 监控到的 Linux 服务器 CPU 的主要...

    LINUX下查看CPU负载的所有命令.docx

    ### Linux下查看CPU负载的相关命令及其解读 #### 一、引言 在Linux环境中,了解系统负载状况至关重要,特别是CPU的使用情况。本文将详细介绍如何使用`vmstat`、`uptime`、`w`和`top`等命令来查看和分析Linux下的CPU...

    调整Linux系统CPU频率.pdf

    Linux系统CPU频率调整 Linux系统CPU频率调整是指在Linux操作系统中调整CPU频率...Linux系统CPU频率调整是一种重要的技术,可以帮助用户根据系统负载和电池电量等情况来动态调整CPU频率,以达到节能或提高性能的目的。

    Linux 获取CPU和内存的大小

    在Linux操作系统中,监控CPU和内存的使用情况是系统管理员日常任务的重要部分,这有助于优化系统性能、排查问题以及合理分配资源。以下是一些获取CPU和内存大小以及使用率的方法。 **一、CPU信息** 1. **查看CPU...

    Linux监视CPU的命令

    对于多核或多处理器系统而言,`mpstat` 提供了更细致的监控功能,使得管理员能够更好地了解每个 CPU 的负载情况。结合其他工具如 `iostat` 和 `top`,可以进一步增强对系统资源使用的理解,从而优化系统性能。

    linux查看负载.docx

    Linux 查看负载命令详解 Linux 查看负载是一种重要的系统管理任务,了解系统的负载情况可以帮助管理员更好地管理服务器,避免系统崩溃和性能下降。Linux 中有多种查看负载的命令,本文将对 top、uptime、w 三种常用...

    linux-让多核CPU达到指定的CPU使用率脚本

    在Linux系统中,多核CPU的使用率管理是优化系统性能和资源分配的重要环节。"linux-让多核CPU达到指定的CPU使用率脚本"是一个旨在提升机器CPU使用率的实用工具,它能帮助系统管理员更好地控制和利用计算资源。下面...

    linux 运维自动监测脚本(CPU,内存,磁盘,负载),自测成功

    本文将详细介绍如何使用Linux脚本来实现自动监测服务器的CPU、内存、磁盘使用情况以及系统负载,并在超过预设阈值时发送告警邮件。这一方法可以帮助运维人员及时发现并预防服务器资源紧张的问题。 首先,我们要编写...

Global site tag (gtag.js) - Google Analytics