【导读】 换屏后手机总自动重启怎么回事,下面是小编为你收集整理的,希望对你有帮助!自动重启一般分为三种原因,一种是硬件故障或者电池接触不良 ,一种是安装的软件有冲突,一种是运行程序或者缓存过多,可以通过以下方法解决:1、硬件故障或者电池接触不良,这个需要拿去售后检测或者更换电池。2......
发布时间0:2023-06-01 19:01:03
简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析。
讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体排查思路的介绍。所谓 “授人以鱼不如授人以渔”。本文试图建立一个方法和套路,来帮助读者对 Load 高问题排查有一个更全面的认识。
没有基线的 Load,是不靠谱的 Load
从接触 Unix/Linux 系统管理的第一天起,很多人就开始接触 System Load Average 这个监控指标了,然而,并非所有人都知道这个指标的真正含义。一般说来,经常能听到以下误解:
Brendan Gregg 在最近的博客 [Linux Load Averages: Solving the Mystery] (http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html) 中,讨论了 Unix 和 Linux Load Average 的差异,并且回朔到 24 年前 Linux 社区的讨论,并找到了当时为什么 Linux 要修改 Unix Load Average 的定义。文章认为,正是由于 Linux 引入的 D 状态线程的计算方式,从而导致 Load 高的原因变得含混起来。因为系统中引发 D 状态切换的原因实在是太多了,绝非 IO 负载,锁竞争这么简单!正是由于这种含混,Load 的数值更加难以跨系统,跨应用类型去比较。所有 Load 高低的依据,全都应该基于历史的基线。本微信公众号也曾写过一篇相关文章,可以参见Linux Load Average那些事儿。
如前所述,由于在 Linux 操作系统里,Load 是一个定义及其含混的指标,排查 loadavg 高就是一个很复杂的过程。其基本思路就是,根据引起 Load 变化的根源是 R 状态任务增多,还是 D 状态任务增多,来进入到不同的流程。
这里给出了 Load 增高的排查的一般套路,仅供参考:
在 Linux 系统里,读取 /proc/stat 文件,即可获取系统中 R 状态的进程数;但 D 状态的任务数恐怕最直接的方式还是使用 ps 命令比较方便。而 /proc/stat 文件里 procs_blocked 则给出的是处于等待磁盘 IO 的进程数:
通过简单区分 R 状态任务增多,还是 D 状态任务增多,我们就可以进入到不同的排查流程里。下面,我们就这个大图的排查思路,做一个简单的梳理。
R 状态任务增多
即通常所说的 CPU 负载高。此类问题的排查定位主要思路是系统,容器,进程的运行时间分析上,找到在 CPU 上的热点路径,或者分析 CPU 的运行时间主要是在哪段代码上。
CPU user 和 sys 时间的分布通常能帮助人们快速定位与用户态进程有关,还是与内核有关。另外,CPU 的 run queue 长度和调度等待时间,非主动的上下文切换 (nonvoluntary context switch) 次数都能帮助大致理解问题的场景。
因此,如果要将问题的场景关联到相关的代码,通常需要使用 perf,systemtap, ftrace 这种动态的跟踪工具。
关联到代码路径后,接下来的代码时间分析过程中,代码中的一些无效的运行时间也是分析中首要关注的,例如用户态和内核态中的自旋锁 (Spin Lock)。
当然,如果 CPU 上运行的都是有非常意义,非常有效率的代码,那唯一要考虑的就是,是不是负载真得太大了。
D 状态任务增多
根据 Linux 内核的设计, D 状态任务本质上是 TASK_UNINTERRUPTIBLE 引发的主动睡眠,因此其可能性非常多。但是由于 Linux 内核 CPU 空闲时间上对 IO 栈引发的睡眠做了特殊的定义,即 iowait,因此iowait 成为 D 状态分类里定位是否 Load 高是由 IO 引发的一个重要参考。
当然,如前所述, /proc/stat 中的 procs_blocked 的变化趋势也可以是一个非常好的判定因 iowait引发的 Load 高的一个参考。
CPU iowait 高
很多人通常都对 CPU iowait 有一个误解,以为 iowait 高是因为这时的 CPU 正在忙于做 IO 操作。其实恰恰相反, iowait 高的时候,CPU 正处于空闲状态,没有任何任务可以运行。只是因为此时存在已经发出的磁盘 IO,因此这时的空闲状态被标识成了 iowait ,而不是 idle。
但此时,如果用 perf probe 命令,我们可以清楚得看到,在 iowait 状态的 CPU,实际上是运行在 pid 为 0 的 idle 线程上:
相关的 idle 线程的循环如何分别对 CPU iowait 和 idle 计数的代码,如下所示:
而 Linux IO 栈和文件系统的代码则会调用 io_schedule,等待磁盘 IO 的完成。这时候,对 CPU 时间被记为 iowait 起关键计数的原子变量 rq->nr_iowait 则会在睡眠前被增加。注意,io_schedule 在被调用前,通常 caller 会先将任务显式地设置成 TASK_UNINTERRUPTIBLE 状态:
CPU idle 高
如前所述,有相当多的内核的阻塞,即 TASK_UNINTERRUPTIBLE 的睡眠,实际上与等待磁盘 IO 无关,如内核中的锁竞争,再如内存直接页回收的睡眠,又如内核中一些代码路径上的主动阻塞,等待资源。
Brendan Gregg 在最近的博客 [Linux Load Averages: Solving the Mystery] (http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html)中,使用 perf 命令产生的 TASK_UNINTERRUPTIBLE 的睡眠的火焰图,很好的展示了引起 CPU idle 高的多样性。本文不在赘述。
因此,CPU idle 高的分析,实质上就是分析内核的代码路径引起阻塞的主因是什么。通常,我们可以使用 perf inject 对 perf record 记录的上下文切换的事件进行处理,关联出进程从 CPU 切出 (swtich out) 和再次切入 (switch in) 的内核代码路径,生成一个所谓的 Off CPU 火焰图.
当然,类似于锁竞争这样的比较简单的问题,Off CPU 火焰图足以一步定位出问题。但是对于更加复杂的因 D 状态而阻塞的延迟问题,可能 Off CPU 火焰图只能给我们一个调查的起点。
例如,当我们看到,Off CPU 火焰图的主要睡眠时间是因为 epoll_wait 等待引发的。那么,我们继续要排查的应该是网络栈的延迟,即本文大图中的 Net Delay 这部分。
至此,你也许会发现,CPU iowait 和 idle 高的性能分析的实质就是 延迟分析。这就是大图按照内核中资源管理的大方向,将延迟分析细化成了六大延迟分析:
任何上述代码路径引发的 TASK_UNINTERRUPTIBLE 的睡眠,都是我们要分析的对象!
限于篇幅,本文很难将其所涉及的细节一一展开,因为读到这里,你也许会发现,原来 Load 高的分析,实际上就是对系统的全面负载分析。怪不得叫 System Load 呢。这也是 Load 分析为什么很难在一篇文章里去全面覆盖。
本文也开启了浅谈 Linux 性能分析系列的第一章。后续我们会推出系列文章,就前文所述的六大延迟分析,一一展开介绍,敬请期待……
关于作者
杨勇 (Oliver Yang),Linux 内核工程师,来自阿里云系统组。曾就职于 EMC,Sun 中国工程研究院,在存储系统和 Solaris 内核开发领域工作。
本文为阿里云原创内容,未经允许不得转载。
【导读】 黄瓜生吃好还是熟吃好 黄瓜怎么样吃更健康一些,下面是小编为你收集整理的,希望对你有帮助!黄瓜是很多人喜欢吃的美食,夏天可能很多人会生吃黄瓜,那么黄瓜到底是生吃好一些还是煮熟吃好一起呢,和小编一起了解探索一下吧。黄瓜生吃好还是熟吃好其实黄瓜最好不要生吃,很多人知道黄瓜不仅可以减肥,同时还可......
发布时间:2023-06-01 07:01:03
在4月份播出的一众新剧中,《请叫我总监》是这其中让人印象最深刻的一部,甜宠类剧作本就有着广泛的受众群,但却鲜少能够上星,显然《请叫我总监》与以往的甜宠类剧作有很大的不同。这部剧作虽然是将男女主角的感情.........
发布时间:2023-06-01 06:53:18
在5月还有一个电影周,2023海浪电影周在阿那亚再次启航。其中张译和吴京等也出席阿那亚电影周盛典,这是他们自中国观察奖以来第二次联手出席该活动。吴京回应张仪华表奖时说,他真诚地祝贺皇帝作为影帝,网友说.........
发布时间:2023-06-01 06:03:09
【导读】 烤箱烤大虾多长时间,下面是小编为你收集整理的,希望对你有帮助!烤箱烤大虾需要十分钟。将虾稍微腌制一下,200度,十分钟就好。烤箱停止之后,还有余温,可以再放置五分钟再拿出来。记得最后在虾背上铺上黄油,并且烤前烤箱需要180度预热5分钟。烤虾是一道美味的菜品,制作......
发布时间:2023-06-01 06:01:03
如果你喜欢电影,或许你刷到过他的视频——扁豆看电影。这个账号在全网的粉丝超过千万,解说过的电影也接近500部,它背后的主人叫何自强。现在的他已经不仅是个UP主(指在视频网站、论坛等上传视频音频文件的人.........
发布时间:2023-06-01 05:03:11
【导读】 什么叫动车,下面是小编为你收集整理的,希望对你有帮助!指轨道交通系统中装有动力装置车辆,包括机车和动力车厢两大类。动车装配有驱动车轮,而与之相对应地无驱动装置车辆为拖车。动车为安装有车轮驱动机器设备铁路车辆,不是动车组。不仅高速列车中有动车,所有火车类型......
发布时间:2023-06-01 05:01:03
5月1日清晨,洪欣突然发文自称和张丹峰不再是夫妻关系,张丹峰也回应说“对,不过了”,还附上了笑哭了的表情包,不难看出二人是在冲动下发文的。随后,毕滢也发微博喊话两人吵架归吵架,别拿离婚开玩笑,这么发展.........
发布时间:2023-06-01 04:03:10
【导读】 南巨龙:南美超巨型恐龙(超过30米长/尾巴灵活),下面是小编为你收集整理的,希望对你有帮助!南巨龙是一种泰坦巨龙类的超巨型恐龙,体长超过30米,诞生于8800万年前的白垩纪末期,最大的特点就是它的尾巴灵活性非常强,比雷龙还要更加敏捷精准,据说能够快速拍中一只巨脉蜻蜓,第一批南巨龙化石是在南美......
发布时间:2023-06-01 04:01:03
5月18日是第76届戛纳世界电影节红毯开幕的第二天,今天有不少明星陆续抵达,红毯依旧出现百花齐放的状况。首先是张雨绮,今天是她本次戛纳红毯的第二套造型了。张雨绮一向在造型方面相当大胆,这次穿着白色礼衣.........
发布时间:2023-06-01 03:03:21
【导读】 贺铸最豪放的词是哪首?,下面是小编为你收集整理的,希望对你有帮助!贺铸是北宋词人,字方回,又名贺三愁,人称贺梅子,自号庆湖遗老。他出身贵族,是宋太祖贺皇后族孙,后来又娶宗室之女,是贺知章后裔。由于先祖贺知章是庆湖的,所以就自号为庆湖遗老。贺铸擅长写词,词的风格很多样......
发布时间:2023-06-01 03:01:04
近日,剧组被闯,父母受扰,王一博方呼吁抵抗“追私”违规行为!之前王一博被曝出一段视频,视频中王一博的手机被安装了监听软件,并且在某酒店房间内,拍照了大量的不雅观视频。该工作曝光之后,引发了众多网友的重.........
发布时间:2023-06-01 02:03:11
【导读】 三星堆为什么不挖了 挖掘保护技术不够成熟(现今技术突破),下面是小编为你收集整理的,希望对你有帮助!三星堆自1929年被发现,1934年时华西大学博物馆组成的考古队首次小范围发掘了三星堆遗址,此后在八十多年当中陆陆续续进行了十多次挖掘。明明三星堆可以进行深入研究,毕竟它带给我们如此多的谜团,挖掘的越......
发布时间:2023-06-01 02:01:03