zoukankan      html  css  js  c++  java
  • Linux系统平均负载和CPU使用率的差异及联系

    做为一个测试工程师,每当我们发现计算机变慢的时候,我们通常执行 uptime 或 top 命令,来了解系统的负载情况。或者使用相关可视化平台直接查看平均负载和CPU使用率。

    那么这二者具体是什么呢?有什么关系呢?

    先说平均负载,

    标准定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。

      CPU 负载值在 Linux 系统中表示正在运行,处于可运行状态的平均作业数(读取一组与流程执行线程对应的机器语言的程序指令),或者非常重要,休眠但不可中断(不可交错的休眠状态))。也就是说,要计算 CPU 负载的值,只考虑正在运行或等待分配 CPU 时间的进程。不考虑正常的休眠过程(休眠状态),僵尸或停止的过程。

    可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即 ps aux 命令下 STAT 处于 R 状态的进程。

    不可中断状态的进程:处于内核态关键流程中的进程,且不可被打断,如等待硬件设备IO响应,ps 命令 D 状态的进程。

    理想状态:每个cpu上都有一个活跃进程,即平均负载数等于cpu数。

    过载值:平均负载高于cpu数量 70% 的时候。

    再说cup使用率

    CPU使用率定义:单位时间内cpu繁忙情况的统计。

      如果我们观察在给定时间间隔内通过CPU的不同进程,则利用率百分比将表示相对于CPU执行与每个进程相对应的指令的那个时间间隔的时间部分。但这种计算只运行的进程,而不是那些正在等待,无论它们是在队列(可运行状态)还是睡着但不可中断(例如在等待输入/输出操作的结束)被认为。
    因此,这个指标可以让我们了解哪些进程最大程度地挤压CPU,但是如果系统状态过载或者未充分利用,则不能给出真实的系统状态图。

    一个类比
    上面还看太懂怎么办?没事,我们来看一个简单的类比例子。

    先假设最简单的情况,你的计算机只有一个 CPU,所有的运算都必须由这个 CPU 来完成。

    那么,我们不妨把这个 CPU 想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过。(很显然,这座桥只能单向通行。)

    系统负载为 0,意味着大桥上一辆车也没有。

    系统负载为 0.5,意味着大桥一半的路段有车。

    系统负载为 1.0,意味着大桥的所有路段都有车,也就是说大桥已经"满"了。但是必须注意的是,直到此时大桥还是能顺畅通行的。

    系统负载为 1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的 70%。以此类推,系统负载 2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负载 3.0,意味着等待上桥的车辆是桥面车辆的 2 倍。总之,当系统负载大于 1,后面的车辆就必须等待了;系统负载越大,过桥就必须等得越久。

    CPU 的系统负载,基本上等同于上面的类比。大桥的通行能力,就是CPU 的最大工作量;桥梁上的车辆,就是一个个等待 CPU 处理的进程(process)。

    如果CPU 每分钟最多处理100个进程,那么系统负载0.2,意味着CPU在这 1 分钟里只处理 20 个进程;系统负载 1.0,意味着 CPU 在这 1 分钟里正好处理 100 个进程;系统负载 1.7,意味着除了 CPU 正在处理的100 个进程以外,还有 70 个进程正排队等着CPU处理。

    为了计算机顺畅运行,系统负载最好不要超过 1.0,这样就没有进程需要等待了,所有进程都能第一时间得到处理。很显然,1.0 是一个关键值,超过这个值,系统就不在最佳状态了,你要动手干预了。

      Linux系统平均负载和CPU使用率是我们查看服务器性能的关键指标,二者相互联系,又相辅相成。若是看单个指标,数据可能有误,建议同时查看。

    本文出自“timeorspace”博客,转载请务必保留此出处http://www.cnblogs.com/timeorspace/ 欢迎大家关注我的公众号,上面会及时发布一些知识, 公众号请查找 testingspace 名称为timeorspace的测试家
  • 相关阅读:
    小程序工程化探索:大规模场景下的问题和解决方案----------------引用
    对Taro Next小程序跨框架开发的探索与实践-----------------引用
    对Node.js 中的依赖管理------------引用
    对redux的研究--------引用
    JavaScript 中的 for 循环---------------引用
    对JavaScript 模块化的深入-----------------引用
    对Webpack 应用的研究-----------------引用
    webpack5持久化缓存
    设置x 轴斜体(每次我都百度,这次单独为它发一个)
    字典元组列表常用方法
  • 原文地址:https://www.cnblogs.com/timeorspace/p/11413292.html
Copyright © 2011-2022 走看看