linux_负载分析之LoadAverage

原创: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为例:

image

这里的 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

如下图

image

结果

image

结果分析:
图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

如下图

image

结果

image

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

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

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

stress -c 24 --timeout 3600

结果如下

image

图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并无必然关系,但这个图中将二者建立关系了)。

image

状态为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

image

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

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

image

其中:
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的负载是否均衡

输出各参数含义:

image

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容

  • 系统平均负载 系统平均负载:是处于可运行或不可中断状态的平均进程数。 可运行进程:使用 CPU 或等待使用 CPU...
    safecdn阅读 613评论 0 0
  • 基础概念 1)定义:在单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。 2)区别:需要与单位时间内的C...
    0981b16f19c7阅读 311评论 0 0
  • uptime 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负...
    tracy_668阅读 1,016评论 0 3
  • 微信公众号:云计算通俗讲义 持续输出技术干货,欢迎关注! 通过本文你将了解: 架构 性能指标 监控工具 故障分析 ...
    程序员姜戈阅读 545评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,686评论 0 5