Linux 性能优化实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
87256 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
结束语 (1讲)
Linux 性能优化实战
15
15
1.0x
00:00/00:00
登录|注册

30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?

结合应用程序的原理
分析进程的I/O行为
定位导致瓶颈的进程
确认磁盘I/O性能瓶颈
pidstat
vmstat
iostat
工具能提供的性能指标
文件系统和磁盘I/O性能指标对应的工具
opensnoop
filetop
lsof
strace
top
pidstat
iostat
slabtop
/proc/slabinfo
/proc/meminfo
df
响应时间
吞吐量
IOPS
使用率
文件I/O指标
缓存使用情况
索引节点使用情况
存储空间使用情况
分析方向
分析流程
从性能工具出发
从I/O指标出发
磁盘I/O工具
文件系统工具
磁盘I/O性能指标
文件系统I/O性能指标
性能指标和工具的联系
性能指标和工具的联系
性能工具
性能指标
如何迅速分析I/O的性能瓶颈
性能指标和工具的联系

该思维导图由 AI 生成,仅供参考

你好,我是倪朋飞。
前几节学习中,我们通过几个案例,分析了各种常见的 I/O 性能问题。通过这些实战操作,你应该已经熟悉了 I/O 性能问题的分析和定位思路,也掌握了很多 I/O 性能分析的工具。
不过,我想你可能还是会困惑,如果离开专栏,换成其他的实际工作场景,案例中提到的各种性能指标和工具,又该如何选择呢?
上一节最后,我留下了作业,让你自己整理思路。今天,我就带你一起复习,总结一下,如何“快准狠”定位系统的 I/O 瓶颈;并且梳理清楚,在不同场景下,指标工具怎么选,性能瓶颈又该如何定位。

性能指标

老规矩,我们先来回顾一下,描述 I/O 的性能指标有哪些?你可以先回想一下文件系统和磁盘 I/O 的原理,结合下面这张 Linux 系统的 I/O 栈图,凭着记忆和理解自己写一写。或者,你也可以打开前面的文章,挨个复习总结一下。
学了这么久的 I/O 性能知识,一说起 I/O 指标,你应该首先会想到分类描述。我们要区分开文件系统和磁盘,分别用不同指标来描述它们的性能。

文件系统 I/O 性能指标

我们先来看文件系统的情况。
首先,最容易想到的是存储空间的使用情况,包括容量、使用量以及剩余空间等。我们通常也称这些为磁盘空间的使用量,因为文件系统的数据最终还是存储在磁盘上。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何快速分析系统I/O瓶颈以及选择性能工具的方法。首先,文章回顾了文件系统和磁盘I/O的性能指标,包括存储空间使用情况、缓存使用情况、文件I/O等,并强调了在不同场景下指标的选择和分析方法。其次,文章介绍了获取这些性能指标的工具,包括df、/proc/meminfo、iostat、pidstat、strace、lsof等,并结合案例详细说明了这些工具的使用方法和分析过程。最后,文章强调了掌握系统工作原理对工具使用的重要性,指出只要理清系统工作原理,工具使用并不难。整体而言,本文通过案例分析和工具介绍,为读者提供了快速了解系统I/O瓶颈分析和性能工具选择的方法,具有很高的实用性。文章通过图表和案例分析,帮助读者快速掌握文件系统和磁盘I/O性能分析的思路,为读者提供了实用的技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(31)

  • 最新
  • 精选
  • 黄智荣
    一次io性能问题 数据写es,运行一段时间后,发现写入很慢,查io时发现,读的io很高,写的io很少,很奇怪只写数据还没查询,读的io使用率基本接近100%。 用iotop定位到es一些写的线程,将线程id转成16进制,用jstack打印出es的堆栈信息,查出16进制的线程号的堆栈。发现原来是es会跟据doc id查数据,然后选择更新或新插入。es数据量大时,会占用了很多读的io. 后面写es就不传id,让es自动生成。解决了问题。

    作者回复: 👍 思路清晰。大家也可以参考分析 es 或者其他类似的问题

    2019-01-29
    4
    88
  • 麋鹿在泛舟
    老师,如何判断磁盘是在 顺序读 还是 随机读? --- 可以使用strace把系统调用都找出来,write是否连续就可以看到了.

    作者回复: 是的,或者使用 blktrace 观察

    2019-01-30
    28
  • Geek_b04b12
    我是一名开发者,当初公司刚刚成立,项目上线,那一次版本上线记得使用是更改了表的结构,然后系统在请求一个api以后,系统的top各种指标都达到了峰值,导致了机器直接死掉,重启以后,再请求,仍旧会宕机,当初没有看学习这个课程,然后,就各种百度,google,整体的思路想想和现在差不多,api请求以后,建立的那个进程的占用的内存,io都会很高,根据那个id ,记得使用lsof ,看到系统就一直在频繁的调用一个c语言函数,咨询了 相关的c/c++工程师,然后结合php的语言(业务是用php写的)函数的封装,最后找到了那个php函数,再找到上层自定义函数,然后发现是由于数据库的一个表的列的默认字段设置为了null,导致一个死循环,最终,将这个mysql的表的字段的默认值修改后,发现问题就迎刃而解了。。印象特别的深刻,虽然是开发,但是喜欢linux。。。各种编程语言离不开服务器的底层(linux服务器) 现在系统的学习linux以后,遇到问题就不会那么慌乱无助,现在想想,知其然不知其所以然(以前参加过一个比较基础的linux培训,重点是操作),对以后的职业发展真的不利! 收益斐然,多谢!

    作者回复: 谢谢支持,很高兴专栏可以帮到更多的人

    2019-08-24
    2
    24
  • 我来也
    [D30打卡] 套路了解了. 其实查找其他方面的问题也都是这样啊.一步一步缩小范围. 首先,确定有没有瓶颈产生,或者有哪方面的瓶颈. 其次,看是谁导致的. 再次,是谁操作什么导致的. 最后,结合实际,给出解决方案.

    作者回复: 是的,都是一样的套路,关键是要知道每一步该怎么做,又为什么这么做。实际上最终的优化还要综合考虑成本和收效。

    2019-01-28
    8
  • vvccoe
    倪老师,你好。 能详细说明一下IOPS吗? 1.100 IOPS 是指的一秒内,能处理100次IO请求,这个请求包含了寻道定位数据吗? 2.一次请求是不是只包含了4K的数据量,如果一次操作是9K 会拆成3次IO请求。

    作者回复: 1. IOPS就是 I/O per second 的缩写,指的是发送给磁盘的读写请求数(注意这里是系统合并后发给磁盘的) 2. 每次请求的大小不是固定的,所以才会有 IOPS 和吞吐这些不同的指标

    2019-01-28
    7
  • ninuxer
    打卡day31 满满的套路,一心只想放假,无心上班,还得熬一周😂

    作者回复: 趁着有时间正好学习😊

    2019-01-28
    5
  • lyonger
    老师好,我想请教一个问题: 很多异常产生时是短时,那么过了以后没有现场可以分析了。比如io utils报警100%,但登陆机器上查看但时候可能已经没有现场,没法查到是哪个进程导致的。而我了解到sar命令可以查历史信息,但是好像sar -d 查磁盘的时候找不到是哪个进程。那么有更好的办法查询历史信息,或者保留现场的方式呢?

    作者回复: 嗯,是的,所以需要搭建监控系统,把这些历史数据记录下来(参考53、54篇)。

    2019-06-25
    3
  • 每天晒白牙
    【day31打卡】 老师的课程好用心,准备这些案例都会很费时,讲了心法,接下来就是我们自己在工作中的实战了,总之这个课很值。谢谢老师

    作者回复: 谢谢支持

    2019-01-29
    3
  • hola
    套路篇总是价值1个亿

    作者回复: 😊 谢谢

    2019-02-23
    2
  • walker
    文件系统和磁盘的IOPS,响应时间,吞吐量有什么区别吗

    作者回复: 中间多了一层文件系统,文件系统也还有一层缓存

    2019-02-18
    2
收起评论
显示
设置
留言
31
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部