原创:linux_负载分析之LoadAverage
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数。和 CPU 使用率并没有直接的关系
一般的进程需要消耗 CPU、内存、磁盘I/O、网络I/O等资源,在这种情况下,平均负载就不是单独指的CPU使用情况。即内存、磁盘、网络等因素也可以影响系统的平均负载值。不过影响最大的是 CPU 使用率、CPU 等待和磁盘I/O
他不仅包扩了正在使用CPU的进程,还包括等待 CPU 和等待磁盘I/O的进程。

查看load average

# cat /proc/loadavg
# top
# uptime
# w

top为例:

这里的 load average 的三个值分别指系统在最后 1/5/15 分钟 的平均负载值。

如何理解load average

将CPU负载理解为车道的负载,对单车道而言:
如果路面上的车不多,没有占满车道,那么load < 1;
如果占满了车道,load = 1;
如果车道外面还有车在等待,load > 1;
需要注意的是,load = 1 不代表CPU无法工作了,这只是表示满负荷运行,例如实际生活中的例子,车道占满了,但是车流还能有序前进。
简单来说就是:“排队中的”除”正在处理中的”

案例分析

使用如下工具:
stress:Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
sysstat:Linux 性能工具,用来监控和分析系统的性能,以下案例中会用到这个包的 2 个命令 mpstat 和 pidstat。
mpstat:常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
pidstat:常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标

场景1:CPU密集型进程,单个进程

终端一运行 stree 命令,模拟一个 CPU 使用率 100% 的场景

stress --cpu 1 --timeout 600

终端二,查看 CPU 负载的上升状态

uptime
# or watch -n 1 uptime

终端三,查看 CPU 使用状态

mpstat -P ALL 5

终端四,哪个进程导致了 CPU 使用率为 100% 呢? 使用 pidstat 查询

 pidstat -u 5 1

如下图

结果

结果分析:
图1:stress模拟测试
图2:uptime结果的负载率依次增加,但是并未超过1,原因是此时只有1个线程执行,任务队列中也只有1个任务(暂不考虑操作系统的其他任务)。
图3:有个核占用率达到100%了。
图4:占用100%的进程名称是stress(但是进程id3269和图1的不同,这个不清楚为何,测试多次都是+1的关系)。

场景2:I/O 密集型进程,单个进程

基本命令和上面类似
差别在于终端1的测试stress命令

stress -i 1 --timeout 3600

如下图

结果

需要关注的是图3和图4,都体现了iowait是系统瓶颈。

场景3:大量进程的场景,多个进程

终端一:使用 stress 模拟 24 个进程

stress -c 24 --timeout 3600

结果如下

图2:loadavg,大幅增加,说明系统负载偏高
图4:多个进程的iowait取值偏大,说明io时间此时大概率是瓶颈资源

故障排除

不能单纯以load值来判断cpu的负载,要结合cpu的使用率、进程的状态和load值来综合判断。
load飙高一般有三种情况:
1.cpu使用率高,load值高,有状态为R的进程
 这就是网上大部分文章提到的情况,此时,说明任务都是cpu密集型的,都在等待着cpu,这种情况下说明cpu负载很高。
2.cpu使用率不高,load值高,有状态为D的进程
 这种情况会发现进程状态为D,说明任务为IO密集型的任务,都在等待IO,这种情况下要检查io设备。
3.cpu使用率高,load值高,系统中既有R状态又有D状态的进程
 这种情况就不好判断cpu负载了,但是存在D状态的任务,就说明IO操作出现了阻塞,要关注一下IO设备情况了;cpu负载需要排查了D状态进程问题后再去判断;

粗略来看,下图是成立的(之所以说粗略看,因为cpu使用率和loadAVG并无必然关系,但这个图中将二者建立关系了)。

状态为R,表示正在运行,或者处于运行队列,可以被调度运行。
状态为D,表示 uninterruptible sleep,这种状态是不可中断的,无论是kill,kill -9,还是kill -15。
处于D状态的进程通常是在等待IO,比如磁盘 IO,网络 IO,其他外设 IO。
如果处于D状态的时间较长,意味着可能是IO设备本身出了故障。

其他注意事项

什么样的进程会被统计到load里?

进程状态出于R和D(不可中断睡眠)。D状态的进程不常见,等待IO的时候会处于这个状态,一般情况下这个状态时间非常短,如果我们看到大量的D状态的进程,这个时候cpu的使用率未必很高,说明IO遇到瓶颈或IO设备出现了问题;

iowait多少算高

一般 iowait 达 30% 就算高了,需要关注。
使用:iostat -x 1 10
其中如果 %util 到 70%,那么磁盘IO 就很频繁了,需要重点关注。

细分load average

查看loadavg中,由于cpu任务队列贡献(cpu竞争排队)和IO任务队列贡献(IO竞争排队)。
vmstat是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析CPU上下文切换和中断的次数。

## 每隔3秒输出一组数据,输出一次
vmstat 3 1


其中:
r(running or runnable)就是就绪队列的长度,也就是正在运行和等待CPU的进程数。
b(blocked)处于不可中断睡眠状态的进程数。
此外:
cs(context switch):每秒上下文切换的次数。
in(interrupt):每秒中断的次数。

vmstat只给出了系统总体的上下文切换情况,想要查看每隔进程的详细情况,可以使用pidstat。

其中:
cswch表示每秒资源上下文切换(voluntary context switches)的次数
自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如,I/O、内存等系统资源不足时,就会发生自愿上下文切换。

nvcswch表示每秒非自愿上下文切换(non voluntary context switches)的次数。
非资源上下文切换,是指进程由于时间片已到等原因,被系统强制调度,进程发生的上下文切换。比如说,大量进程都在争抢CPU时候,就容易发生非自愿上下文切换。

资源上下文切换变多了,说明进程都在等待资源,有可能发生了I/O等其他问题
非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢CPU。说明cpu是瓶颈。
中断次数变多了,说明cpu被中断处理程序占用,需要通过查看/proc/interrupts文件来分析具体的终端类型

pidstat命令

使用pidstat进行问题定位时,以下命令常被用到:

pidstat -u 1
pidstat -r 1
pidstat -d 1

以上命令以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息。

示例七:pidstat -T

pidstat -T TASK
pidstat -T CHILD
pidstat -T ALL

TASK表示报告独立的task。
CHILD关键字表示报告进程下所有线程统计信息。
ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。

mpstat命令

mpstat的统计信息来自/proc/stat文件
mpstat命令主要用来查看多CPU系统中每个CPU的负载是否均衡

输出各参数含义:

Note:
1.vmstat和mpstat 命令的差别:mpstat 可以显示每个处理器的统计,而 vmstat 显示所有处理器的统计。因此,编写糟糕的应用程序(不使用多线程体系结构)可能会运行在一个多处理器机器上,而不使用所有处理器。从而导致一个 CPU 过载,而其他 CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题。
2.vmstat中所有关于CPU的总结都适合mpstat。当您看到较低的 %idle 数字时,您知道出现了 CPU 不足的问题。当您看到较高的 %iowait 数字时,您知道在当前负载下 I/O 子系统出现了某些问题。
3,一般来说nice值应该是在-20~19的范围 默认是0。nice值越小 进程的优先度越高 只有root用户才可以设置nice负值(提高进程优先度)

参考

一文带你全面了解 Load Average (负载):https://www.sohu.com/a/217589014_262549
linux 平均负载 load average 的含义:www.zhangblog.com/2019/09/14/linux-load/
linux服务器load average飚的很高,但是cpu和内存还可以,这是怎么回事呢:https://segmentfault.com/q/1010000003764511/a-1020000003766640
正确使用load average的姿势:https://blog.csdn.net/zqz_zqz/article/details/80392830
linux性能优化:https://zhuanlan.zhihu.com/p/141451255
进程实时监控pidstat命令详解:https://www.cnblogs.com/mululu/p/5833722.html
pidstat 命令详解(转载):https://www.cnblogs.com/wx170119/p/11411312.html
linux mpstat 命令使用详解:https://blog.csdn.net/wangquan1992/article/details/109490324
Linux硬中断和软中断:https://zhuanlan.zhihu.com/p/85597791
linux为什么要统计nice值为负的cpu占用情况:https://bbs.csdn.net/topics/360017438
Linux性能分析——mpstat求高手讲解?:https://www.zhihu.com/question/379075728

linux_负载分析之LoadAverage相关推荐

  1. 对经典恒流源做电子负载 分析

    对经典恒流源做电子负载分析: 上图为三并联运放后接六个MOS管,此MOS管并联结构当单独一个MOS管烧坏(大功率MOS烧热不够自然会烧坏)以后其它MOS管不受影响. 单独拿出一个运放来分析: 前级同向 ...

  2. 电机与拖动(2) 变压器空/负载分析

     安培右手螺旋定则:将右手的大拇指指向磁场方向,再将其它四根手指握紧电线,则弯曲的方向决定电流的方向. 螺线管载有的电流,会产生磁场. 使用右手螺旋定则,可以判断磁场方向. 将右手握住螺线管,四根手指 ...

  3. 大数据分析案例:应用系统负载分析与磁盘容量预测

    应用系统负载分析与磁盘容量预测 应用系统在日常运行时,会对底层软.硬件造成负荷,显著影响应用系统性能.应用系统性能的因素包括:服务器.数据库.中间件和存储设备.任何一种资源负载过大,都可能会引起应用系 ...

  4. 跟Gregg学习系统性能--[1.4]性能的审视视觉:负载分析跟资源分析

    不同的专业人员采用不同的视觉 --系统管理员通常采用资源分析视角 --应用开发人员通常采用负载分析视角

  5. 数据分析与挖掘实战-应用系统负载分析与磁盘容量预测

    应用系统负载分析与磁盘容量预测 背景 某大型企业为了信息化发展的需要,建设了办公自动化系统.人力资源管理系统.财务管理系统.企业信息门户系统等几大企业级应用系统.因应用系统在日常运行时,会对底层软硬件 ...

  6. 《Python数据分析与挖掘实战》第11章——应用系统负载分析与磁盘容量预测(时间序列)

    文章目录 1.背景与目标分析 2.2 数据探索 2.1 查看数据信息 2.2 数据平稳性分析 3 数据预处理 3.1 数据清洗 3.2 数据变换--属性构造 4 模型构建 4.1 确定模型-- ARM ...

  7. 负载分析及问题排查极简教程

    作者 | Hollis ,来自 | Hollis 平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load.cpu.mem.qps.rt等.每个指标都有其独特的意义,很多时候在线上出现问题时 ...

  8. 存储极客谈“SPC-1负载分析与AFA寿命评估”

    存储极客 这是一群存储偏执狂 为存储而生,跟存储死磕 各具独家秘笈 有观点,有碰撞,有干货 从2015年8月18起 做客存储极客栏目 与你分享存储里的那点事儿 企业存储界公认的SPC-1 Benchm ...

  9. 9 应用系统负载分析与磁盘容量预测

    9.1背景与挖掘目标 本案例通过分析存储设备中磁盘容量预测,通过对磁盘容量的预测,可预测磁盘未来的负载情况,避免应用系统因出现存储容量耗尽的情况而导致应用系统负载率过高,最终引发系统故障.针对历史磁盘 ...

最新文章

  1. MySQL:SELECT COUNT 小结
  2. 曙光高性能集群系统管理员手册(链接)
  3. 使用VS2019开始第一个C语言程序,环境安装配置+代码实例
  4. mysql数据库杀掉堵塞_mysql数据库杀掉堵塞进程
  5. 限制使用su命令的用户与使用sudo机制提升权限
  6. 无心剑中译奥修《性、爱与慈悲》
  7. .sh是什么语言_为什么《山海经·中次二经》中,把“西王母”叫做“马腹”?...
  8. 怎么通过scanf读取一个空白前的字符
  9. github README.md使用
  10. 解决windows 下 mysql命令行导入备份文件 查询时乱码的问题
  11. 爱心代码(c语言实现)
  12. Oct.14 华为数通部算法岗面经
  13. WMS仓库仓储管理系统源码
  14. 微信公众号打开网页自动登陆配置
  15. 基于javaweb+jsp房屋租赁系统(java+SSM+jsp+mysql+maven)
  16. 【基于python的量化策略回测框架搭建】策略表现衡量指标模块
  17. oppo手机删除计算机怎样恢复,▷提示|如何将OPPO手机恢复为出厂设置
  18. php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
  19. OFDM正交频分复用——详解——5G-LTE知识必备
  20. 番茄花园 Windows All In One DVD 特别版

热门文章

  1. This time, ZTE has released the world‘s first
  2. try-catch-finally机制
  3. linux中文件输出输入,linux中文件输入输出的管理
  4. beanfactory的实现类_ApplicationContext和BeanFactory的区别
  5. 吃掉那只青蛙_每日可交付成果–吃青蛙的艺术
  6. ssis 角本组件更新数据_使用SSIS脚本组件作为数据源
  7. sql server合并行_合并SQL Server复制参数化的行筛选器问题
  8. SQL Server整合–在单个SQL Server实例上托管多个数据库
  9. 关于HTML5画布canvas的功能
  10. AspNetPager使用方法