1、文件系统I/O性能指标
- 存储空间的使用情况,包括容量、使用量以及剩余空间等。
- 索引节点的使用情况,也包含容量、使用量以及剩余空间等。如果文件系统中存储过多的小文件,就可能碰到索引节点容量已满的问题
- 缓存使用情况,包括页缓存、目录项缓存、索引节点缓存以及各个具体文件系统(ext4、XFS等)。这些缓存会使用速度更快的内存,用来存储文件数据或者文件系统的元数据,从而减少访问慢速擦盘的次数
- 还包括 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 请求大小
-
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 的进程。最后通过strace和lsof,找出了问题进程正在读写的文件,并找到原因——进程在狂打日志。
第四,在磁盘 I/O 延迟中,先用top、iostat,发现磁盘有 I/O 瓶颈,并用pidstat找出了大量 I/O的进程。但是在starce命令中,没有找到 write 的系统调用。于是,使用新工具filetop和opensnoop,从内核中跟踪系统调用,最终找到瓶颈来源。
第五,在MYSQL 和Redis中,先用top、iostat、pidstat确定并找出 I/O 性能问题的瓶颈来源,正是 mysqld 和 redis-server。随后,使用strace+lsof找出了正在读写的文件。 mysql:根据mysqld正在读写的文件路径,结合数据库引擎原理,发现了慢查询的问题
- redis:根据 reidis-server 读写的文件,以及正在进行网络通信的TCP Socket,和redis的工作原理。发现 Redis 持久化选项配置有问题,以及客户端的不合理使用。
4、排查思路

