专栏首页张戈的专栏教你如何查看Linux的CPU负载

教你如何查看Linux的CPU负载

记得博主以前被问到 CPU 负载如何才算高的时候,出过一次糗,具体就不记录了。。。在网上找了一篇比较详细的 Linux 下的 CPU 负载算法教程,科普一下。不感兴趣,或看不懂的朋友无视即可,不必浪费时间哈。


昨天查看 Nagios 警报信息,发现其中一台服务器 CPU 负载过重,机器为 CentOS 系统。信息如下:

2011-2-15 (星期二) 17:50   WARNING - load average: 9.73, 10.67, 10.49

还有前两个小时发出的警报信息: 2011-2-15 (星期二) 16:50WARNING - load average: 10.52, 10.10, 10.06 2011-2-15 (星期二) 15:40WARNING - load average: 8.27, 9.23, 9.48

一、警报信息的三个参数到底是什么意思?

9.73、10.67、10.49 分别代表前一分钟,五分钟,十五分钟的平均 CPU 负载,最重要的指标是最后一个数字,即前 15 分钟的平均 CPU 负载,这个数字越小越好。所谓 CPU 负载指的是一段时间内任务队列的长度,通俗的讲,就是一段时间内一共有多少任务在使用或等待使用 CPU。

二、除了 Nagios,还有哪些工具可以查看 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 负载分担到每个 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 的内核数

#查看CPU型号:   
$>grep 'model name' /proc/cpuinfo |uniq   
model name : Intel(R) Xeon(R) CPU E5320 @ 1.86GHz   
  
#查看CPU物理个数   
$>grep 'physical id' /proc/cpuinfo |sort |uniq |wc -l   
2  
  
#查看单个CPU是几核的   
$>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 负载的标准是什么样子的了。

六、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 (已失效)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 博客网页导致电脑CPU飙升的问题解决记录

    已经有好几个访客朋友匿名反馈只要打开我的博客电脑的 CPU 就狂转: ? 因为忙一直也没当一回事,一是我自己的 MacbookAir 打开并没有异常,二是因为我...

    张戈
  • Linux系统内存监控、性能诊断工具vmstat命令详解

    最近,烦心事有点多,博客也像是进入了便秘期。虽然还远远不到说放弃的地步,但总有一种挤不出牙膏的郁闷感。很怀念前几个月的冲劲和激情,一天都能存好几篇优质草稿。 看...

    张戈
  • Shell下制作自解压安装包,实现脚本的简单加密

    一、原理阐述 在 linux 下可以用几个最基本的命令制作一个自解压的程序。其原理是:利用 cat 命令可以将两个文件连起来(用>>追加也能达到同样效果),前一...

    张戈
  • PowerVM虚拟化环境下 CPU 利用率的监控与探究

    本文主要介绍在 PowerVM 虚拟化环境下,微分区 CPU 利用率的监控方法,并且深入讨论在虚拟化环境下,CPU 的调度原理。 普通 LPAR CPU 利用率...

    魏新宇
  • 《Linux 性能及调优指南》3.2 CPU瓶颈

    对服务器来说主要的角色就是应用服务器或数据库服务器,CPU作为关键资源经常成为性能瓶颈的根源。CPU使用率高并不总是意味着CPU工作繁忙,它有可能是正在等待其他...

    小小科
  • 用 CPU 烤出来的肉,会特别香吗?

    众所周知,有一句话流传已久「显卡烧水,CPU 烤肉」。而最近有位网友(ytb:たれみみ親衛隊長)就认真实践了这一句,用 CPU 烤出来的肉是不是会特别好吃呢?

    HyperAI超神经
  • 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket

    当我们试着通过 Linux 命令 nproc 和 lscpu 了解一台计算机 CPU 级的架构和性能时,我们总会发现无法正确地理解相应的结果,因为我们会被好几个...

    IT大咖说
  • 了解一下CPU 第一篇(r4笔记第30天)

    CPU可能对于我们来说是熟悉又陌生的,每天的工作基本都离不开CPU,CPU的消耗是系统负载的一个重要指标,每天都会不定时的来看看CPU的使用情况,但是对于它了解...

    jeanron100
  • Linux查询CPU信息

    Tyan
  • 计算机基础 | 多核、缓存...现代CPU是如何工作的

    之前的文章《源代码如何被计算机执行》已经提到,对于一段源代码,计算机主要依靠编译器将源代码转化为CPU可以执行的程序。那么,CPU到底是如何工作的呢?本文将介绍...

    PP鲁

扫码关注云+社区

领取腾讯云代金券