在linux操作系统中,我们一般查看系统的cpu负载情况常用的命令可以是uptime,top,还有vmstat等这些个都是可以有的。每个工具所提供的信息各不相同,

我这里要讨论的仅说cpu部分。使用uptime命令,可以得到操作系统在过去1分钟,5分钟和15分钟的cpu平均负载值,也就是传说中的 load average,这个和top命令右上角那个地方显示出来的东东是想通的,那么这个load average到底是个什么样的东西呢,其实它表示的就是在cpu里面运行的进程数量,不过这里的进程和使用命令来查看到的进程可不太一样。在一定时间内 cpu所能处理和承载的进程数量是有限的,这个数值与cpu的性能有直接关系,或者说这个数值标志着cpu的性能高低,反应到实际的计算机使用上来就是更 高性能的cpu可以在同一时间处理更多进程内容,所以说,一般当你去电脑城买个人电脑的时候导购就会问你电脑的大致用途,其实他们这个时候是在帮你计算你 所需要的电脑性能,其中就包括计算cpu的最大负载值,当然他们一般都不会这么去算,而是根据价格,因为价格高的cpu往往性能就更好,紧接着,他们会问 你大概的预算,其实当了解到你买电脑的用途之后他们自己心里已经帮你预算好了,如果你的预算高于他们的预算,那么恭喜那位卖电脑的,他可以多赚点了。所以 买电脑一定要根据实际需求,比如说cpu支持很高的负载,而你在实际使用中却根本达不到那么高的负载,那不就成了杀鸡用杀猪刀么。

扯远了,说到底,cpu在单位时间内所能处理的进程数越高,那它的性能应该就越高。但是关于这个负载,网上资料有很多种说法,有的说是负载不应该超 过cpu的核心数量,有的说不应该超过cpu核心数量的2倍,有的说不应该超过cpu核心数量的3倍,为什么会有这么多种说法呢,其实大家都是担心一个相 同的问题----怕cpu扛不住,这里超不超过几倍不要紧,最主要的判断标准是你的cpu在达到一定程度负载的时候是不是系统和应用程序依然运行良好,也 就是说判断标准还与实际的应用有关,如果cpu的负载都超了核心数好几倍但是软件运行还依然顺畅,那这个也是可以有的。这里就得说说cpu的运行队列了, 有关运行队列的状态参数可以通过vmstat命令来查看,这里不多做解释,它有两项,一项是run,一项是blocked,也就是vmstat查看到的最 前面的两排,run代表正在cpu里面执行的,blocked代表由于磁盘或其他方面的瓶颈导致他在cpu里面等待的,这两个数值其实和使用uptime 或者top命令查看到的系统负载值是很有关系的,基本上,系统在某个时间的负载值就等同于run的值加上blocked的值,但是这里直接这样用加法来表 示也是不对的,系统负载值是一个平均值,可以是小数,而运行队列的数目是整数。在cpu处于空闲的情况下,run+blocked一般接近0,偶尔蹦出个 1啊2啊的,所以空闲状态下的负载均值一般都是0.几。

但是,当系统的负载逐渐升高,也就是说cpu里运行的东东逐渐变多,那么反应到负载均值上其数值也会跟着逐渐增大,而且可以是很大很大,完全超出 cpu核心数的好多倍,比如我前几天用一台8核机器做测试的时候用top命令查看到的负载值居然达到了将近600,这已经远远超出了cpu可承受的范围, 那为什么已经超出了可接受范围这个负载均值还可以涨到那么高呢,这是因为在cpu里,同一时间可以运行的进程数量有限的,也就是说,vmstat查看到的 run值最大不能超过某个数,但是blocked却可以继续变大,因为进程已经blocked掉了,它几乎占用不了多少cpu资源,而正在run的就不一 样了,一个cpu同一时间能run多少完全取决于它的物理性能,所以当你的机器负载不断升高,你用top命令查看到的负载值也会不断升高,而当负载达到一 定高度时,cpu能处理的运行队列也达到上限,run的值不再增加,这时,blocked的值会继续增加,理论上,blocked可以一直增加到直到系统 崩溃。

总结:在评估cpu的性能优劣时完全照搬网上说的几倍几倍是不准确的,还得你自己动手看看vmstat显示的run值和blocked值,当出现明 显较多的blocked的时候,就说明cpu产生了瓶颈。而top命令和uptime命令显示的负载均值,只能作为判断系统过去某个时间段的状态的参照, 与cpu的性能关系不大。

关于CPU的运行队列与系统负载的更多相关文章

  1. CPU性能判断指标---上下文切换,运行队列和使用率

    http://blog.chinaunix.net/uid-15007890-id-3064254.html uptime11:35:08 up 21:57,  6 users,  load aver ...

  2. Linux系统中的load average(平均负载/运行队列)

    1.load average 的含义 系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度) linux系统中的Load对当前CPU工作量的 ...

  3. linux系统中的基础监控(硬盘,内存,系统负载,CPU,网络等)

      Linux系统常见日常监控 系统信息 查看 CentOS 版本号:cat /etc/redhat-release 综合监控 nmon 系统负载 命令:w(判断整体瓶颈) 12:04:52 up 1 ...

  4. 获取并检查系统负载\CPU\内存\磁盘\网络

    安装依赖 需要net-tools.namp! CentOS:yum -y install net-tools nmap Ubuntu:apt-get update && apt-get ...

  5. shell脚本监控系统负载、CPU和内存使用情况

    hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | ...

  6. 监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。

    zzx@zzx:~$ cat warning.sh #!/bin/bash #监控系统负载与CPU.内存.硬盘.登录用户数,超出警戒值则发邮件告警.    前提安装mail服务nh=`uname -r ...

  7. 监测linux系统负载与CPU、内存、硬盘、用户数的shell脚本

    本节主要内容: 利用Shell脚本来监控Linux系统的负载.CPU.内存.硬盘.用户登录数. 一.linux系统告警邮件脚本 # vim /scripts/sys-warning.sh #!/bin ...

  8. linux 系统负载高 如何检查

    1:load Average 1.1:什么是Load?什么是Load Average?    Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a mea ...

  9. Linux常用指令---系统负载

    查看linux系统负载: http://www.lupaworld.com/article-217011-1.html在Linux系统中,uptime.top等命令都会有系统平均负载load aver ...

随机推荐

  1. LaTeX算法排版 笔记

    方式一 需要包含的 \usepackage[noend]{algpseudocode} \usepackage{algorithmicx,algorithm} 源码 \begin{algorithm} ...

  2. HDU 3404 Switch lights 博弈论 nim积

    http://acm.hdu.edu.cn/showproblem.php?pid=3404 题目 http://www.doc88.com/p-5098170314707.html 论文 nim积在 ...

  3. Codeforces Beta Round #7 D. Palindrome Degree hash

    D. Palindrome Degree 题目连接: http://www.codeforces.com/contest/7/problem/D Description String s of len ...

  4. timeago.js-时间显示插件

    注意事项: 1. 时间格式 = “2018-03-02 17:13:00”时,动态获取的时间无法通过 拼接字符串的方法 添加到 dom元素的 datetime属性上,结果为 <div class ...

  5. HTML、XML、XHTML 有什么区别?

    HTML即是超文本标记语言(Hyper Text Markup Language),是最早写网页的语言,但是由于时间早,规范不是很好,大小写混写且编码不规范,是语法较为松散的.不严格的Web语言 XH ...

  6. JMX操作实例--做一回技术控

    我来做一回技术控,这部分内容也是简单的API调用例子而已,做一回技术控,发点小骚文,不过你看了,也许知道JConsole是怎么做出来的了,呵呵! 先不用管他干什么,代码运行后,自己改改自然知道做什么的 ...

  7. WM-N-BM-09 WM-N-BM-14

    USI Delivers WICED Module to Gain Great Success Customers Broadcom’s Wireless Internet Connectivity ...

  8. SASS输出风格

    嵌套输出方式 nested sass --watch test.scss:test.css --style nested 嵌套输出方式 expanded sass --watch test.scss: ...

  9. FAQ:枚举和常规的值,到底哪种更符合程序使用?

    问: 枚举和常规的值,到底哪种更符合程序使用? 答: 肯定是根据不同的场景,做出不同的选择. 如果是不同的值需要不同的逻辑,肯定是枚举好一些.如果只是表示某个取值范围且这个范围会动态变化,用常规的值 ...

  10. python笔记23-unittest单元测试之mock

    什么是mock unittest.mock是一个用于在Python中进行单元测试的库,Mock翻译过来就是模拟的意思,顾名思义这个库的主要功能是模拟一些东西. 它的主要功能是使用mock对象替代掉指定 ...