iostat命令详解_对iostat输出结果的理解

86cade024fce05ef9ae0f9b4491ac952.png

前言:

日常工作中,线上服务会出现各种奇奇怪怪的问题,每次出现问题都是根据现象猜测出现问题的原因,比如请求响应慢了,就排查整个请求的逻辑,每一步花了多少时间,分析半天终于发现是某一步慢了以后,在分析为什么慢。用这样的方式排查问题效率很低,而且很容易查错方向,导致不能及时解决问题。直到有一天,一位前辈指点道:出现问题不知道怎么回事,查看系统监控啊。。。这才恍然大悟。

于是我就想整理一下,有哪些值得关注的系统监控可以查看。这个帖子linux系统监控命令汇总给了我思路,可以从内存、cpu、硬盘、网络,四个方面对系统进行监控。于是我开始整理相关的命令,然后到了磁盘io的时候,查到了iostat命令。在这个帖子IO实时监控命令iostat详解中介绍iostat -x 输出的内容里,有一个avgqu-sz 是平均请求队列的长度。并且说,队列长度越短越好。然后我就不禁好奇,这个队列是什么呢?操作系统处理磁盘io的模型是什么呢?于是展开了这次学习之旅。

正文:

这次学习首先发现了之前的一些理解上的偏差,就是用户态内核态阻塞的关系:

用户态中进程执行read()方法,因为cpu的运算速度远大于磁盘的寻址速度,所以这个操作是阻塞的。之前我错误的理解是,用户进程执行read()方法,会导致进程阻塞,所以接下来会进入另一个进程,同时因为是系统调用,所以会进入内核态,所以,我理所当然的认为,内核态也是一个进程,比如有n个进程都调用read方法,这个时候内核进程就会把这些io请求放到一个队列里去调度。正好跟iostat中的队列相对应。

然鹅,这个观点是及其错误的,用户态和内核态是一个进程的两种状态,两种状态的区别是权限级别不一样,所以用户态进程执行read()方法,并不会发生上下文切换,只是改变了进程的特权等级。

那么问题就来了,进程什么时候阻塞的?队列又在哪里呢?后来就看到了这个帖子read系统调用深度剖析里边讲到,read内核态的操作是在不同层上处理的,比如我们要read()a.txt,表面上看,这是读取一个文件,算一个read请求,但是实际上,这个a.txt只是vfs的抽象出的概念,底层具体文件系统一直到设备驱动层,有可能就变成了对多个扇区的访问。所以iostat监控的请求数量,并不是我们进程中执行read的数量,而是具体对磁盘扇区操作请求的数量

接下来的问题就是,队列在哪里呢?比如有n个进程都要读写磁盘,这些进程会在一个队列里边排队,一个一个执行吗?这个逻辑明显是有漏洞的,如果一个进程读很大的文件,岂不是要把其他进程饿死。还好,发现了这个帖子CFQ完全公平队列,里边讲到,目前内核中默认的调度算法应该是cfq,叫做完全公平队列调度。这个调度算法人如其名,它试图给所有进程提供一个完全公平的IO操作环境。它为每个进程创建一个同步IO调度队列,并默认以时间片和请求数限定的方式分配IO资源。也就是说,对于每个进程的多个io操作,都会放到一个队列中。io调度层根据时间片调度这些请求。当某一个时间片该进程的数据读取完成了,方法返回,如果时间片内没有读取完,进程进入阻塞。

所以所谓的阻塞的系统调用,并不是调用后立刻就进入阻塞状态,而是进入内核态以后,在特定的条件下把进程阻塞掉。所以也就有了非阻塞的io调用,在自己的时间片内执行不完io操作,不进入阻塞而是直接返回失败。下次再调用的时候再执行一部分io操作,直到某一次调用把数据读取完了,返回成功。

另一个疑问是,文章提到:当设备完成了 IO 请求之后,通过中断的方式通知 cpu,比如某个进程将请求加入自己的队列以后,把队列中相邻的请求优化掉,然后对磁盘发起读请求,这个时候后续的读操作到底需不需要cpu参与呢?如果需要的话,感觉就不需要中断通知了。如果不需要的话,磁盘自己能把数据写入内存吗?

然后就查到了这个:硬盘属于外储存器,CPU只能直接读取内储存器,如果cpu只能读取内存的话,队列中对于磁盘扇区到读写操作就不会占用cpu资源。但是数据到达内存以后,复制到用户空间需要cpu参与,所以大量文件到读写还是会占用cpu资源。

总结一下,iostat有两个数据监控,一个是cpu,一个是硬盘,之所以这么设计,我的理解是把io操作分为了需要cpu和不需要cpu的两个阶段,可以针对两个阶段的监控信息分别分析问题,比如,如果硬盘监控的%util接近100%,说明磁盘一直在读写扇区,这个时候硬盘是瓶颈。如果硬盘正常,cpu彪高,说明大量内存的读写占用了大量cpu,这时cpu是瓶颈。

另外,因为cfq队列对每个进程都维护一个队列,所以iostat中avgqu-sz 是平均请求队列的长度,是所有队列的平均值。

补充一点的话,还看到这么个说法:

传统磁盘本质上一种机械装置,如FC,SAS,SATA磁盘,转速通常为5400/7200/10K/15K rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。寻道时间Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。旋转延迟Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms。数据传输时间Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。因此,理论上可以计算出磁盘的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15K rpm,则磁盘IOPS理论最大值分别为,IOPS = 1000 / (3 + 60000/7200/2) = 140IOPS = 1000 / (3 + 60000/10000/2) = 167IOPS = 1000 / (3 + 60000/15000/2) = 200

也就是说,磁盘瓶颈的本质是转速,10K的硬盘,每秒最多处理167个请求,如果iostat监控发现r/s超过了167,肯定会导致%util 100%以及很高的await,所以硬盘的瓶颈是请求次数。而cpu的瓶颈是访问的数据量,因为越大的数据量就需要越多的指令去复制拷贝。

总结:

最开始分析内存监控的时候,发现了cache和buffer区的概念,对磁盘的操作会把磁盘数据缓存到cache中,也就是说如果写一个测试用例不停的读写同一个文件,看监控并不会发现%util有变化,因为都是对内存的操作。

附录:

linux磁盘io调度算法:linux IO调度算法

最后,让我们保持独立思考,不卑不亢。长成自己想要的样子!
(引用自 我非常喜欢的B站up主 ”独立菌儿“的口头禅哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机windows10属性配置,电脑显示属性设置,教你win10系统电脑显示属性的设置教程...

今天小编教你win10系统电脑显示属性的设置教程,显卡作为计算机最为基本的配置和最重要的配件之一,承担着输出显示图形的任务。不知电脑显卡设置在哪里打开及如何设置的用户,请来看看下面的介绍吧。显卡是一台电脑的第二个核心,我们…

庖丁解牛-图解MySQL 8.0优化器查询解析篇

简介: SQL优化器本质上是一种高度抽象化的数据接口的实现,经过该设计,客户可以使用更通用且易于理解的SQL语言,对数据进行操作和处理,而不需要关注和抽象自己的数据接口,极大地解放了客户的应用程序。 作者…

三款典型国产分布式数据库的对比评测

简介: 编者按:近几年国产数据库市场风生水起,涌现了多款优秀的国产数据库产品,本文选取了三款典型的国产分布式数据库进行全方位对比压测,呈现了国产分布式数据库的发展现状。 对于所有的应用系统,数据都是…

bootstraptable中responsehandle获取数据缺失_Python中的向量化字符串操作

Python的一个使用优势是它在处理和操作字符串数据方面相对容易。在此基础上Pandas提供了一套全面的向量化字符串操作(vectorized string operation),这些操作成为处理现实世界数据时所需的必不可少的功能。在本文中,我们将介绍一些Pandas的字符串操作&am…

15 载专注视频增强技术,小而美的 Imint 蕴藏大匠心

如今视频已深深融入我们的生活和工作中,据 CNNIC 数据显示,截止 2021 年 6 月,我国网民的规模达 10.11 亿,其中短视频用户规模 8.88 亿,占网民整体的 87.8%。 这表明我们正步入“视频社会化”时代,随着人们…

Serverless Devs 2.0 全新发布,让 Serverless 应用开发更简单

简介: 2020 年 10 月 23日,阿里巴巴正式宣布开源其首个 Serverless 开发者平台 Serverless Devs。历经近一年精心打磨,今天 Serverless Devs 2.0 正式版全新发布。Serverless Devs 2.0 在平台能力、应用模板以及开发者套件方面能力提升&#…

疫情防控“漫入调查系统”上线 SENSORO 助力提升筛查效率及精准度

连日来,国内多地报告新增病例,加上因春节临近导致的人员流动和聚集增加,基层防疫面临着比平时更大的挑战。为快速、高效地解决大规模漫入信息筛查任务,缓解一线疫情防控压力,SENSORO(北京升哲科技有限公司&…

程序媛如何自我突破?

简介: 很多时候人们是被自己内心的偏见所打败的。作为一名程序媛,保持一种对世界、对人生的不同看法,可以帮助我们树立自己的参照系,不被外部轻易左右。或许我们无法像一些伟人那样打破、推动如此重大的社会认知,但是我…

如何基于Dataphin实现敏感数据保护

简介: 在企业的发展过程中,如果不重视敏感数据的保护,和数据安全体系的建设,那么一旦发生了敏感数据泄漏事件,轻则企业口碑受损,业务受影响;重则会直接触法律,受到主管部门的处罚和制…

百度研究院发布2022科技趋势预测:大模型实用化、AI助力深空探测成热门

1月25日,百度研究院发布2022年科技趋势预测,这是其连续第三年发布对前沿科技趋势的展望。 今年上榜的科技趋势预测涵盖了AI核心技术、交叉学科与跨领域研究,以及AI的产业及社会价值三个层面,包括预训练大模型、AI for Science&am…

计算机操作员技术特长,计算机及应用专业自我鉴定(通用5篇)

计算机及应用专业自我鉴定(通用5篇)自我鉴定是个人在一个阶段的自我总结,自我鉴定可以总结出具体的经验,因此我们是时候写一份自我鉴定了。自我鉴定一般是怎么写的呢?以下是小编收集整理的计算机及应用专业自我鉴定(通用5篇),仅供…

5 款阿里常用代码检测工具,免费用!

简介: 5 款阿里常用代码检测工具免费体验,仅需 2 步,Cherry键盘、公仔抱回家,100%拿奖! 作者 | 喻阳 面临问题 在日常研发过程中,我们通常面临的代码资产问题主要分为两大类:代码质量问题和代…

查看topic信息_如何规划的你博客文章主题(Topic)

产品有了, 写手有了。该写哪些主题,就成问题了。这篇文章,会结合真实案例,告诉大家,该如何规划自己的博客主题。(注意这里不是标题)。以我最近的一个项目, 游泳池产品为例。关键词叫…

DataWorks功能实践速览 — 参数透传

简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率! 往期回顾: DataWorks 功能实践速览01期——数据同步解决方案:为您介绍不同场景下可选的数据同步方案。DataWorks 功能…

GPU还是IPU?IPU 芯片厂商 Graphcore 的 2021

作者 | 宋慧 出品 | CSDN 云计算&AI 科技大本营 AI 人工智能毋庸置疑是目前最火的 IT 技术领域之一,而主攻图形计算的 NVIDIA GPU(图形处理器)又是现今 AI 领域的当红炸子鸡。不过 AI 芯片领域又迎来了新的挑战者,2016 年创立…

云原生大数据架构中实时计算维表和结果表的选型实践

简介: 随着互联网技术的日渐发展、数据规模的扩大与复杂的需求场景的产生,传统的大数据架构无法承载。 作者 | 志羽 来源 | 阿里技术公众号 一 前言 传统的大数据技术起源于 Google 三架马车 GFS、MapReduce、Bigtable,以及其衍生的开源分布…

冬奥开幕在即,现场通信网络技术深度揭秘!

作者 | 小枣君来源 | 鲜枣课堂还有9天,举世瞩目的北京冬奥会就将拉开大幕。本次冬奥会,是继2008年之后,中国再一次承办这种世界最顶级体育盛会。这两年全球疫情肆虐,抗疫形势波折多变。北京冬奥能够如期举办,意义极为重…

Flink 在 58 同城的应用与实践

简介: 58 同城的实时 SQL 建设以及如何从 Storm 迁移至 Flink。 本文整理自 58 同城实时计算平台负责人冯海涛在 Flink Forward Asia 2020 分享的议题《Flink 在 58 同城应用与实践》,内容包括: 实时计算平台架构实时 SQL 建设Storm 迁移 Fli…

当云原生遇到混合云:如何实现“求变”与“求稳”的平衡

简介: 多年来,随着云计算技术的蓬勃发展和落地,越来越多的企业选择采用云计算技术来帮助自己快速完成业务数字化转型,以便能更好地适应市场变化,进而赢得更大的市场空间。 作者|郝树伟 Flexera 的《RightScale2021 云…

之前写的 JSX 的条件语句竟然存在那么多 Bug?

作者 | 零一来源 | 前端印象今天的主题是&#xff1a;关于 JSX 的条件语句&#xff0c;你不知道3件事一、&&隐藏大坑在 JSX 里写条件语句&#xff0c;&& 应该是用的最多的了&#xff0c;例如&#xff1a;function Demo () {// ...省略一些代码return (<div&…