如何迅速分析出系统I/O的瓶颈在哪里?

本文是通过学习倪朋飞老师的《Linux性能优化实战》 :如何迅速分析出系统I/O的瓶颈在哪里

性能指标

我们先来回顾一下,描述 I/O 的性能指标有哪些?我们可以先回想一下文件系统和 磁盘 I/O 的原理,结合下面这张 Linux 系统的 I/O 栈图,凭着记忆和理解自己写一写。
在这里插入图片描述

文件系统 I/O 性能指标

首先,最容易想到的是存储空间的使用情况,包括容量、使用量以及剩余空间等。我们通 常也称这些为磁盘空间的使用量,因为文件系统的数据最终还是存储在磁盘上。

不过要注意,这些只是文件系统向外展示的空间使用,而非在磁盘空间的真实用量,因为文件系统的元数据也会占用磁盘空间。

而且,如果你配置了 RAID,从文件系统看到的使用量跟实际磁盘的占用空间,也会因为 RAID 级别的不同而不一样。比方说,配置 RAID10 后,你从文件系统最多也只能看到所 有磁盘容量的一半。

除了数据本身的存储空间,还有一个容易忽略的是索引节点的使用情况,它也包括容量、 使用量以及剩余量等三个指标。如果文件系统中存储过多的小文件,就可能碰到索引节点 容量已满的问题。

**其次,你应该想到的是前面多次提到过的缓存使用情况,包括页缓存、目录项缓存、索引节点缓存以及各个具体文件系统(如 ext4、XFS 等)的缓存。**这些缓存会使用速度更快的内存,用来临时存储文件数据或者文件系统的元数据,从而可以减少访问慢速磁盘的次数。

除了以上这两点,文件 I/O 也是很重要的性能指标,包括 IOPS(包括 r/s 和 w/s)、响应 时间(延迟)以及吞吐量(B/s)等。在考察这类指标时,通常还要考虑实际文件的读写情况。比如,结合文件大小、文件数量、I/O 类型等,综合分析文件 I/O 的性能。

诚然,这些性能指标非常重要,但不幸的是,Linux 文件系统并没提供,直接查看这些指标的方法。我们只能通过系统调用、动态跟踪或者基准测试等方法,间接进行观察、评估。

磁盘 I/O 性能指标

在磁盘 I/O 原理的文章中,有四个核心的磁盘 I/O 指标。

  1. 使用率,是指磁盘忙处理 I/O 请求的百分比。过高的使用率(比如超过 60%)通常意味着磁盘 I/O 存在性能瓶颈。
  2. IOPS(Input/Output Per Second),是指每秒的 I/O 请求数。
  3. 吞吐量,是指每秒的 I/O 请求大小。
  4. 响应时间,是指从发出 I/O 请求到收到响应的间隔时间。

考察这些指标时,一定要注意综合 I/O 的具体场景来分析,比如读写类型(顺序还是随 机)、读写比例、读写大小、存储类型(有无 RAID 以及 RAID 级别、本地存储还是网络 存储)等。

不过,这里有个大忌,就是把不同场景的 I/O 性能指标,直接进行分析对比。这是很常见的一个误区,一定要避免。

除了这些指标外,缓冲区 (Buffer)也是要重点掌握的指标,它经常出现在内存和磁盘问题的分析中。

文件系统和磁盘 I/O 的这些指标都很有用,需要我们熟练掌握,所以总结成了一张图, 帮我们分类和记忆。可以保存并打印出来,方便随时查看复习,也可以把它当成 I/O 性能 分析的“指标筛选”清单使用。
在这里插入图片描述

性能工具

掌握文件系统和磁盘 I/O 的性能指标后,我们还要知道,怎样去获取这些指标,也就是搞明白工具的使用问题。

  • 查看文件系统容量的工具 df。它既可以查看文件系 统数据的空间容量,也可以查看索引节点的容量。至于文件系统缓存,我们通过/proc/meminfo、/proc/slabinfo 以及 slabtop 等各种来源,观察页缓存、目录项缓 存、索引节点缓存以及具体文件系统的缓存情况。
  • 在磁盘 I/O 的原理中,我们分别用 iostat 和 pidstat 观察了磁盘和进程的 I/O 情况。它们都是最常用的 I/O 性能分析工具。通过 iostat ,我们可以得到磁盘的 I/O 使用率、吞吐量、响应时间以及 IOPS 等性能指标;而通过 pidstat ,则可以观察到进程的 I/O 吞吐量以及块设备 I/O 的延迟等。

性能指标和工具的联系

建议从指标和工具两个不同维度出发,整理记忆:

  1. 从 I/O 指标出发,你更容易把性能工具同系统工作原理关联起来,对性能问题有宏观的 认识和把握。
  2. 而从性能工具出发,可以让你更快上手使用工具,迅速找出我们想观察的性能指标。特别是在工具有限的情况下,我们更要充分利用好手头的每一个工具,少量工具也要尽力挖掘出大量信息。

第一个维度,从文件系统和磁盘 I/O 的性能指标出发。换句话说,当你想查看某个性能指标时,要清楚知道,哪些工具可以做到

根据不同的性能指标,对提供指标的性能工具进行分类和理解。这样,在实际排查性能问题时,你就可以清楚知道,什么工具可以提供你想要的指标,而不是毫无根据地挨个尝试,撞运气。

虽然我们不需要把所有相关的工具背下来,但如果能记清楚每个指标对应的工具特性,实际操作起来,一定能更高效、灵活。

这里,把提供 I/O 性能指标的工具做成了一个表格,方便你梳理关系和理解记忆。我们可以把它保存并打印出来,随时记忆。当然,也可以把它当成一个“指标工具”指南来使用。
在这里插入图片描述
第二个维度,从工具出发。也就是当你已经安装了某个工具后,要知道这个工具能提供哪些指标。

这在实际环境中,特别是生产环境中也是非常重要的。因为很多情况下,我们并没有权限安装新的工具包,只能最大化地利用好系统已有的工具,而这就需要你对它们有足够的了解。

具体到每个工具的使用方法,一般都支持丰富的配置选项。不过不用担心,这些配置选项并不用背下来。我们只要知道有哪些工具,以及这些工具的基本功能是什么就够了。真正要 用到的时候, 通过 man 命令,查它们的使用手册就可以了。

同样的,也将这些常用工具汇总成了一个表格,方便区分和理解。自然,我们也可以当成一个“工具指标”指南使用,需要时查表即可。
在这里插入图片描述
如何迅速分析 I/O 的性能瓶颈

到这里,相信对I/O的性能指标已经非常熟悉,也清楚每种性能指标分别能用什么工具来获取。

你应该发现了,比起前两个板块,虽然文件系统和磁盘的 I/O 性能指标仍比较多,但核心的性能工具,其实就是那么几个。熟练掌握它们,再根据实际系统的现象,并配合系统和 应用程序的原理, I/O 性能分析就很清晰了。

不过,不管怎么说,如果每次一碰到 I/O 的性能问题,就把上面提到的所有工具跑一遍, 肯定是不现实的。

在实际生产环境中,我们希望的是,尽可能快地定位系统的瓶颈,然后尽可能快地优化性能,也就是要又快又准地解决性能问题。

那有没有什么方法,可以又快又准地找出系统的 I/O 瓶颈呢?答案是肯定的。

还是那句话,找关联。多种性能指标间都有一定的关联性,不要完全孤立的看待他们。想弄清楚性能指标的关联性,就要通晓每种性能指标的工作原理。
在这里插入图片描述
图中列出了最常用的几个文件系统和磁盘 I/O 性能分析工具,以及相应的分析流程,箭 则表示分析方向。这其中,iostat、vmstat、pidstat 是最核心的几个性能工具,它们也提供了最重要的 I/O 性能指标。举几个例子你可能更容易理解。

总结

虽然 I/O 的性能指标很多,相应的性能分析工具也有不少,但熟悉了各指标 含义后,你就会自然找到它们的关联。顺着这个思路往下走,掌握常用的分析套路也并不 难。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值