Linux性能优化实战
倪朋飞
微软资深工程师,Kubernetes项目维护者
立即订阅
23395 人已学习
课程目录
已完结 64 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词 | 别再让Linux性能问题成为你的绊脚石
免费
01 | 如何学习Linux性能优化?
CPU 性能篇 (13讲)
02 | 基础篇:到底应该怎么理解“平均负载”?
03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)
05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?
06 | 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?
07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)
08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)
09 | 基础篇:怎么理解Linux软中断?
10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?
11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?
12 | 套路篇:CPU 性能优化的几个思路
13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?
14 | 答疑(二):如何用perf工具分析Java程序?
内存性能篇 (8讲)
15 | 基础篇:Linux内存是怎么工作的?
16 | 基础篇:怎么理解内存中的Buffer和Cache?
17 | 案例篇:如何利用系统缓存优化程序的运行效率?
18 | 案例篇:内存泄漏了,我该如何定位和处理?
19 | 案例篇:为什么系统的Swap变高了(上)
20 | 案例篇:为什么系统的Swap变高了?(下)
21 | 套路篇:如何“快准狠”找到系统内存的问题?
22 | 答疑(三):文件系统与磁盘的区别是什么?
I/O 性能篇 (10讲)
23 | 基础篇:Linux 文件系统是怎么工作的?
24 | 基础篇:Linux 磁盘I/O是怎么工作的(上)
25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)
26 | 案例篇:如何找出狂打日志的“内鬼”?
27 | 案例篇:为什么我的磁盘I/O延迟很高?
28 | 案例篇:一个SQL查询要15秒,这是怎么回事?
29 | 案例篇:Redis响应严重延迟,如何解决?
30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
31 | 套路篇:磁盘 I/O 性能优化的几个思路
32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系
网络性能篇 (13讲)
33 | 关于 Linux 网络,你必须知道这些(上)
34 | 关于 Linux 网络,你必须知道这些(下)
35 | 基础篇:C10K 和 C1000K 回顾
36 | 套路篇:怎么评估系统的网络性能?
37 | 案例篇:DNS 解析时快时慢,我该怎么办?
38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
40 | 案例篇:网络请求延迟变大了,我该怎么办?
41 | 案例篇:如何优化 NAT 性能?(上)
42 | 案例篇:如何优化 NAT 性能?(下)
43 | 套路篇:网络性能优化的几个思路(上)
44 | 套路篇:网络性能优化的几个思路(下)
45 | 答疑(五):网络收发过程中,缓冲区位置在哪里?
综合实战篇 (13讲)
46 | 案例篇:为什么应用容器化后,启动慢了很多?
47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)
48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)
49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?
50 | 案例篇:动态追踪怎么用?(上)
51 | 案例篇:动态追踪怎么用?(下)
52 | 案例篇:服务吞吐量下降很厉害,怎么分析?
53 | 套路篇:系统监控的综合思路
54 | 套路篇:应用监控的一般思路
55 | 套路篇:分析性能问题的一般步骤
56 | 套路篇:优化性能问题的一般方法
57 | 套路篇:Linux 性能工具速查
58 | 答疑(六):容器冷启动如何性能分析?
加餐篇 (4讲)
加餐(一) | 书单推荐:性能优化和Linux 系统原理
加餐(二) | 书单推荐:网络原理和 Linux 内核实现
用户故事 | “半路出家 ”,也要顺利拿下性能优化!
用户故事 | 运维和开发工程师们怎么说?
结束语 (1讲)
结束语 | 愿你攻克性能难关
Linux性能优化实战
登录|注册

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

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

性能指标

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

文件系统 I/O 性能指标

我们先来看文件系统的情况。
首先,最容易想到的是存储空间的使用情况,包括容量、使用量以及剩余空间等。我们通常也称这些为磁盘空间的使用量,因为文件系统的数据最终还是存储在磁盘上。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux性能优化实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(23)

  • 黄楚门的世界
    一次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
    1
    30
  • Ender0224
    老师,如何判断磁盘是在 顺序读 还是 随机读?
    ---
    可以使用strace把系统调用都找出来,write是否连续就可以看到了.

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

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

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

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

    作者回复: 谢谢支持

    2019-01-29
    2
  • xfan
    想听老师的网络部分了,

    作者回复: 快了 😊

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

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

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

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

    2019-08-24
    1
  • hola
    套路篇总是价值1个亿

    作者回复: 😊 谢谢

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

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

    2019-01-28
    1
  • 划时代
    打卡总结,快放假了,依然不能停下前进的脚步。

    作者回复: 👍

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

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

    2019-06-25
  • 如果
    DAY30,打卡
    2019-03-15
  • walker
    文件系统和磁盘的IOPS,响应时间,吞吐量有什么区别吗

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

    2019-02-18
  • Orcsir
    Flag
    2019/01/31
    2019-01-31
  • 小老鼠
    第一表倒数第三行没找到blkparse命令

    作者回复: 是说 blkparse 命令安装后找不到吗?这是安装 blktrace 时自动就会带的

    2019-01-30
  • holen
    老师,如何判断磁盘是在 顺序读 还是 随机读?

    作者回复: strace 或者 blktrace 观察 I/O 是否连续

    2019-01-30
  • 挺直腰板
    老师好关闭了swap分区,还会有虚拟内存大小

    作者回复: 呃,不能学到I/O就忘记了内存呀😓。是时候回去复习下了

    2019-01-29
收起评论
23
返回
顶部