编者按青囊,英文名sysAK(system analyse kit),是龙蜥社区(OpenAnolis)的一个开源项目,聚集阿里百万服务器的多年运维经验,通过对这些经验进行抽象总结出典型场景,针对不同的运维需求提供了一系列工具,形成统一的产品进行服务。工具集包含了很多强大的底层系统运维能力,这些工具融合到了不同产品的运维平台中,实现高效的自动化运维。本系列文章将青囊拟人化,穿插进狄仁杰判案中,带领大家领略青囊在网络、IO、内存等领域叱咤风云的魅力。

本文作者毛文安(品文)为系统运维SIG负责人、李光水为系统运维SIG核心成员。

相关阅读:

《netinfo:揭开网络抖动面纱的神器

《coredump 瘦身风云》

一、引子

话说上回青囊协助曾泰处理完官道的网络抖动大案之后,接到急报说邗沟发生盐船剧烈抖动以致倾覆的大案,狄仁杰又带上青囊火速启程赶往邗沟。

二、邗沟现场断案

此时大运河上一片沉寂,青囊递给狄仁杰两片从案发现场打捞上来,标记有“iostat印记”的盐船龙骨碎片,沉声道,“邗沟覆船案,两年内已发生多次。每到邗沟,大风忽起,船只便开始抖动摇晃;更甚者,船只直接解体。为此,我收集到解体船只的碎片,发现这船体抖动确有玄机。”运河之上押运官盐的船只,遇风浪或保持稳健前行,或摇晃解体,如能知晓各部件抖动之时间长短,分析其关联部位,便能揪出幕后真凶。

面对此龙骨碎片,青囊不禁联想到之前处理 IO 问题时的一件奇事,当时系统也是抖得厉害,blktrace 等工具无法清楚解释在哪里抖的,后来便研究了一下 IO 领域的抖动问题,它表现为在一段时间内,IO 性能无法始终保持一致,会突发性的下跌到不符合我们所预期的性能范围。就业务影响而言,数据存储效率低下、无法维持稳定的对外服务,影响用户体验。目前看邗沟覆船案,极有可能跟 IO 抖动有关,不禁喜上眉梢。

狄仁杰接过碎片,仔细端详 iostat 中的各指标,沉吟片刻道,“磁盘 vda 乃官家所部署的云盘,号称 us 级别延迟,现在可以看到写 iops 最高也不过十、写 IO 最高也不过百 KB/s,何以在如此低的 IO 负载情况下,竟有数十ms的await冲高,着实令我百思不得其解。”

await 是一个从时间维度描述 IO 性能的指标,表示为单位时间内每个 IO 请求被处理的平均耗时,单位为微秒或者毫秒,亦可理解为 IO 的响应时间。这个指标是内核 IO 子系统 block 层透出来后经过系统工具 iostat 加工之后的结果,因此,它既包含了一个 IO 在 IO 软件栈中处理的时间,也包含了磁盘的处理时间。因此 await 冲高现象是 IO 抖动问题中比较典型的特征。

“狄阁老莫愁,针对此类 IO 抖动问题,鄙人正巧最近研制出一诊断利器——iosdiag,已经集成到 sysAK 的工具集,或许可为阁老排忧解难”,青囊笑道。

众人目光炯炯,恍若流光般向青囊汇聚而去,狄仁杰笑道,“青囊之神技,果真层出不穷,且与我等说来,何为 iosdiag?”

三、 iosdiag 功能介绍

青囊道:

iosdiag,是 sysAK 工具平台中的 IO 存储诊断工具,已具备 IO 时延探测功能、IO HANG 诊断功能两大功能,前者用于分析当前 IO 存储链路中的时延抖动问题并确定抖动边界,后者可检测当前系统中 IO HANG 事件并确定问题边界。

IO 时延,指 IO 在其生命周期内所经历的 IO 各路径上的时间损耗,通常情况下,可以分为 OS 耗时和磁盘耗时,而 OS 内比较受关注的就是 IO 栈了,IO 栈里面又包含复杂的 block、驱动等部分;正所谓每每碰到 IO 抖动问题,必有人抓耳挠腮、暗无天日呐。

iosdiag 中的 iolatency工具,实现了 IO 时延探测功能,最喜隐匿于内核 IO 栈之中,竟能眼观六路,耳听八方,以迅雷不及掩耳之势,将各 IO 在生命周期之内,不同关键路径上的时间戳信息尽收于乾坤宝袋之中;而后又基于此,计算 IO 路径上的所有时延数据,来确认 IO 耗时最大的路径(磁盘耗时或者软件内耗时),可谓神通广大,法力无边。

且 iosdiag latency 已经成功定位到多起线上 IO 抖动问题,目前具备如下特色:

  • 支持捕获 IO 延迟超过指定耗时的 IO

  • 支持获取 IO 各路径延迟信息,准确定界磁盘、OS 耗时(包含 block、驱动、磁盘、IO 结束耗时)问题

  • 信息格式化输出,更直观,具备完整单个 IO 信息、所有 IO 统计信息、进程级IO 耗时分析,能够直接了当的知道哪里出了问题

“甚好!知我者,真乃青囊也,此迷局当以 iosdiag latency 破之”,边听青囊介绍,狄仁杰一脸愁容渐渐消散,满面春风取而代之,如今已是柳暗花明,既有 iosdiag latency 利器在手,何不上去诊断一把。

四、iosdiag 抖动问题破解

狄仁杰早已迫不及待,让青囊运行了 sysak iosdiag latency,开始了激动人心的 IO 抖动诊断之旅。

[root@VM20200727-16 /root]
#sysak iosdiag latency -b 10 -t 10

以上命令表示,sysak iosdiag latency 将在系统中运行 10 秒,并收集系统中该时间段内延迟超过 10ms 的 IO,随后退出诊断,届时,IO 在各路径上的延迟将无所遁形。时间 1 秒 1 秒过去,众人满怀期待,当看到 iosdiag 诊断结束之后,狄仁杰随即打开了诊断日志文件,果然大有玄机,而后众人发现,总共收集到 9 个IO,其中 flush/fua io 有 6 个,而经过统计主要 IO 耗时竟然集中在 OS 的 block 中(最大耗时 51.4ms)

..."diskname":"vda","total_ios": 9,"flush/fua":6"delays":[...{"component":"os(block)","percent":"58.988%","max":51442,"min":14,"avg":20686},{"component":"os(driver)","percent":"0.034%","max":22,"min":4,"avg":12},{"component":"disk","percent":"40.966%","max":51291,"min":250,"avg":14366},{"component":"os(complete)","percent":"0.009%","max":7,"min":2,"avg":3}]...

“iosdiag 果真神器也!”,狄仁杰忍不住赞叹,朝青囊竖起了大拇指。

“只是现下已知 os(block) 耗时严重,可否进一步获悉耗时原因?”

“当然可以,狄阁老且看,诊断结果中不仅包含延迟分布统计信息,同时还包含延迟最大的 IO,我们可以将此 IO 展开来看,或可发现其中玄机”,青囊笑答曰。

"abnormal_seq":{"summary":{"check_time":"Thu Oct 14 11:21:36 2021","event":"slow io","component":"os(block)","delay":"51442 us","total_delay":"51738 us","cpu":0,"comm":"jbd2/vda1-8 -> kworker/4:1H","pid":"358 -> 352","diskname":"vda","op":"FWFS","sector":59159840,"data_len":4096},"detail":{...}}

“此 IO 为 jbd2 线程发起的 flush/fua 请求(op: FWFS),总耗时 51.7ms,而 block 层耗时竟有 51.4ms,实在是不正常。正如我们对 block 层 flush 实现机制的理解,flush/fua 请求在真正写入数据前后,要执行多次 flush 请求,不仅要求串行执行,而且还需要 workqueue 的介入,繁琐至极。由此可见,有两种可能性导致此 IO 耗时长:workqueue 调度慢或者磁盘本身就慢。”

听完青囊的分析,狄仁杰面露喜色,认为已经离真相不远,追问,“不知是否还有信息可以查看进一步原因?”

“狄阁老此前是否留意到除了 os(block)路径耗时严重之外,还有 disk 路径也占据了 40% 的的耗时?由此,我料问题必定由磁盘引起,我们可再找一个捕获到的写 IO 请求展开来看”,青囊似乎早已了然于胸,淡然从诊断日志文件中随意取出一个写 IO 信息。

{"summary":{"check_time":"Thu Oct 14 11:21:36 2021","event":"slow io","component":"disk","delay":"32465 us","total_delay":"32520 us","cpu":0,"comm":"jbd2/vda1-8 -> kworker/0:1H","pid":"358 -> 357","diskname":"vda","op":"WS","sector":59159848,"data_len":98304},"detail":{"delays":[{...},{"component":"block","delay":43},{"component":"driver","delay":8},{"component":"disk","delay":32465},{"component":"complete","delay":4}],"points":[...]}
}

至此众人发现,正常的写 IO,在磁盘侧的延迟竟然达到 32.4ms,同时此 IO 也是通过 workqueue 下发,但 block 侧的消耗也仅 43us,由此可见没有 workqueue 调度慢问题,是磁盘有问题。

自打将磁盘升级之后,线上稳定运行数月,未见await冲高问题,而沉寂了许久的大运河也重现往日喧嚣,官家盐船南来北往,淮北百姓终于又能吃上官盐了。

五、后记

一个月后,破案捷报传到洛阳,武则天读完奏折惊叹不已,“邗沟覆船已发多次,各家工具齐上,尚不能破,独狄怀英竟以青囊之 iosdiag 神器,不日便告功成,真乃神乎其技矣。只是这青囊,为何许人也?”

这时忽有内史答曰,“青囊,英文名 sysAK,是龙蜥社区(OpenAnolis)的一个开源项目,里面有诸多工具神技”

武则天惊呼,“sysAK,真乃神技也!”

而此时远隔千里之外的大运河边,杨柳依依,狄仁杰正依依不舍送别青囊,“这些日子多亏有你解决各类疑难杂症,你那诸多神技,也令我大开眼界,我实在不舍你离去”。

“这些时日承蒙阁老厚爱,奈何要务在身,不便久留。日后若阁老再有需要,哪怕远在天边,青囊必定肝脑涂地,为阁老解忧。”

加入系统运维 SIG组:

系统运维SIG致力于打造一个集主机管理、配置部署、监控报警、异常诊断、安全审计等一系列功能的自动化运维平台。

欢迎更多开发者加入系统运维 SIG:

网址:https://openanolis.cn/sig/sysom

邮件列表:sysom@lists.openanolis.cn

—— 完 ——

加入龙蜥社群

加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】拉你入群;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥社区(OpenAnolis)交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!

关于龙蜥社区

龙蜥社区(OpenAnolis)是由企事业单位、高等院校、科研单位、非营利性组织、个人等按照自愿、平等、开源、协作的基础上组成的非盈利性开源社区。龙蜥社区成立于 2020 年 9 月,旨在构建一个开源、中立、开放的Linux上游发行版社区及创新平台。

短期目标是开发龙蜥操作系统(Anolis OS)作为 CentOS 替代版,重新构建一个兼容国际 Linux 主流厂商发行版。中长期目标是探索打造一个面向未来的操作系统,建立统一的开源操作系统生态,孵化创新开源项目,繁荣开源生态。

龙蜥OS 8.4已发布,支持 x86_64 、ARM64、LoongArch 架构,完善适配 Intel、飞腾、海光、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。

欢迎下载:

https://openanolis.cn/download

加入我们,一起打造面向未来的开源操作系统!

https://openanolis.cn

往期精彩推荐

1.杭州西软加入龙蜥社区,应用软件兼容适配已完成

2.龙蜥操作系统(Anolis OS)荣获“中国开源云联盟年度优秀开源项目”奖!

3.龙蜥社区10月运营委员会会议顺利召开

4.海尔智能加入龙蜥社区,推动软硬件应用生态繁荣发展

5.云栖回顾|龙蜥论坛圆桌环节都有哪些精彩观点?

风云再续:他抖任他抖,IO诊断在我手相关推荐

  1. 原来“抖商大会”和抖音没有关系!抖音起诉“抖商大会”主办方 索赔300万

    近年来,随着抖音等一系列短视频软件在全国范围内的火爆,带动了全民短视频的风潮.抖音还进军了海外,在海外市场也有不小的影响力,给今日头条打了一场漂亮的胜仗,也是字节跳动最为成功的产品之一. 图片来源于网 ...

  2. 一台服务器控制上百个抖音账号,怎么批量管理上百个抖音,抖音mcn一键高效运营软件...

    原标题:怎么批量管理上百个抖音,抖音mcn一键高效运营软件 易媒助手:文章.短视频同时分发软件 正因为憧憬收获更喜人的广告分成,通常个人选择性注册秒拍.皮皮虾等10多个热门内容平台,如果你们只同步文章 ...

  3. 抖音企业号抖音智能营销系统源码待开发技术。。。。。

    抖音企业号抖音智能营销系统源码待开发技术:Symbol值通过Symbol函数生成.这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的Symbol类型.凡是属性名属于Sy ...

  4. python爬虫抖音音浪_爬虫抖音_抖音淘宝联盟入驻条件

    如果你刚开始操作抖音,运营抖音还不懂平台的操作技巧,可以加我的微信:422591055 带你玩转抖音自媒体平台,我还联合了抖音运营的几位大佬,每日分享免费的抖音运营的实操讲解,还可以免费获取到抖音运营 ...

  5. 抖音获取抖音商品原数据 API 返回值说明

    今天分享的是抖音获取抖音商品原数据 API 返回值说明: item_get_app-获取抖音商品原数据 [查看演示] onebound.douyin.item_get_app 公共参数: 注册链接(获 ...

  6. 今日分享主题:关于抖音上抖币充值的介绍

    抖音是目前最受欢迎的短视频平台之一,在这个平台上,你可以欣赏到各种类型的视频,从搞笑到音乐,从美妆到美食,从萌宠到旅游,都有大量的视频内容供用户欣赏. 在抖音上,抖币是一种虚拟货币,用户可以用它来购买 ...

  7. 培养线上“铁粉”巧妙利用抖音平台 “抖音达人”一年卖车21辆

    培养线上"铁粉"巧妙利用抖音平台 "抖音达人"一年卖车21辆 短视频在2020年迎来了爆发式发展,同时也为品牌带来了更丰富的营销选择.作为2020年发展最快的短 ...

  8. 快抖创客丨抖音怎么带货?抖音带货有什么标准?

    抖音的玩法,并不是表面看到那么简单.当大部分人把抖音当做娱乐时,已经有勇者在研究抖音上有哪些变现的商业模式,什么产品适合抖音?做抖音都需要投入什么? 快抖创客,是国内首家以"短视频红人对接. ...

  9. 抖店和抖音小程序有什么区别,旅游行业适合抖店还是抖音小程序?

    越来越多旅游企业选择在抖音上做短视频营销,比如景区,酒店,旅行社等等,目的不仅仅是宣传,更重要的是为了转化. 为了减少用户的预订步骤,提高转化率,许多涉旅企业都想在抖音平台上完成交易闭环.但在稍作了解 ...

  10. 抖音测试心理是什么软件,实用心理测试大全抖音版-抖音实用心理测试大全小游戏官方版预约 v1.0-友情手机站...

    实用心理测试大全抖音版是一个综合类型的测试小程序,包含了各种各样的心理测试题目,还可以根据玩家们选择的不同模式,然后提供不同的测试结果,总之呢还是比较智能的.最近这个测试游戏,在抖音里边可是超级火爆了 ...

最新文章

  1. django设置cookie和session
  2. MATLAB-矩阵相关计算(1)
  3. 使用squid代理时出现“The requested URL could not be retrieved”
  4. EXCEL中提取某行最后一个有效单元格数据
  5. 机器学习算法总结之支持向量机(四)
  6. Windows下nmap命令及Zenmap工具的使用方法
  7. Java 运算符(Operators)
  8. YIT-CTF—社工类
  9. 显示农历天气时钟小部件下载_玛雅日历安卓版下载|玛雅日历app下载_v5.3.2
  10. 7个向上管理技巧,让你的职场一路开挂
  11. 【工程/物理光学(四)——光的衍射技术】
  12. a foreign key constraint fails
  13. 如何解决android studio找不到手机!
  14. springboot 应用:异常管理,应用启动过程,应用监控 Prometheus 和 Grafana
  15. 小米/红米手机如何通过USB数据线把手机网络共享给电脑
  16. 试用计算机绘制*组成的图案c语言,C语言绘图与计算机仿真技术
  17. 【前端之旅】Web前端发展简史
  18. Windows下的这4款国产神器,请低调收藏使用!
  19. 系统登陆界面开发及实现之(二)添加界面背景图片
  20. Cisco 3850交换机保存配置后重启配置文件丢失

热门文章

  1. win7打补丁显示不适用计算机,更新win7系统提示“此更新不适用于您的计算机”如何解决...
  2. 如何对接小发猫的伪原创API
  3. 【解决方法】VMware Horizo​​n View创建虚拟桌面失败,报错:View Composer Agent初始化错误(16):无法激活软件许可证
  4. 【obs owt】屏幕采集创建DXGI
  5. python自动生成字幕_语音自动转文字和自动生成字幕
  6. Python 层次分析法 AHP
  7. CRLF、CR、LF详解
  8. Django ORM 使用手册
  9. VS2017 离线安装vsix插件
  10. Java实习日记(5)