1、文件系统I/O性能指标

  1. 存储空间的使用情况,包括容量、使用量以及剩余空间等。
  2. 索引节点的使用情况,也包含容量、使用量以及剩余空间等。如果文件系统中存储过多的小文件,就可能碰到索引节点容量已满的问题
  3. 缓存使用情况,包括页缓存、目录项缓存、索引节点缓存以及各个具体文件系统(ext4、XFS等)。这些缓存会使用速度更快的内存,用来存储文件数据或者文件系统的元数据,从而减少访问慢速擦盘的次数
  4. 还包括 IOPS(包括 r/s 和 w/s)、响应时间(延迟)、吞吐量(B/s)等。在考察这类指标时,还需要考虑实际文件的读写情况,如:结合文件大小、文件数量、I/O类型等,综合分析文件 I/O 的性能

    2、磁盘 I/O 性能指标

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

    3、性能工具

    第一,在文件系统原理中,查看文件系统容量的工具 df,可以查看文件系统数据的空间容量以及索引节点的容量。文件系统缓存,通过 /proc/meminfo/proc/slabinfo 以及 slabtop 等各种来源,观察页缓存、目录项缓存、索引节点缓存以及具体文件系统的缓存情况。
    第二,在磁盘 I/O 原理中,通过 iostat得到磁盘的 I/O 使用率、吞吐量、响应时间以及IOPS等性能指标。通过 pidstat观察进程的 I/O 吞吐量以及块设备的 I/O 的延迟。
    第三,在狂打日志的案例中,通过 top 发现CPU 的 iowait 比较高。然后,有用iostat发现磁盘的 I/O 使用率瓶颈,并用pidstat 找出大量 I/O 的进程。最后通过 stracelsof,找出了问题进程正在读写的文件,并找到原因——进程在狂打日志。
    第四,在磁盘 I/O 延迟中,先用 topiostat ,发现磁盘有 I/O 瓶颈,并用 pidstat 找出了大量 I/O的进程。但是在 starce 命令中,没有找到 write 的系统调用。于是,使用新工具 filetopopensnoop,从内核中跟踪系统调用,最终找到瓶颈来源。
    第五,在MYSQL 和Redis中,先用 topiostatpidstat 确定并找出 I/O 性能问题的瓶颈来源,正是 mysqld 和 redis-server。随后,使用 strace +lsof 找出了正在读写的文件。

  • mysql:根据mysqld正在读写的文件路径,结合数据库引擎原理,发现了慢查询的问题

  • redis:根据 reidis-server 读写的文件,以及正在进行网络通信的TCP Socket,和redis的工作原理。发现 Redis 持久化选项配置有问题,以及客户端的不合理使用。

    4、排查思路

    image.png