以下内容来自于RHEL 官方文档。以下工具可以用来分析磁盘 IO 和文件系统性能瓶颈。
分析方法见 《性能分析方法-《性能之巅》笔记》,USE 法必须要使用相关性能分析工具。
影响 IO 和文件系统性能的主要因素:
数据写入或读取特征
顺序或随机
buffered 或 Direct IO
数据与底层 geometry 保持一致
块大小
文件系统大小
日志大小和位置
记录访问时间
确保数据可靠性
预抓取数据
预分配磁盘空间
文件碎片
资源争用
vmstat
vmstat
工具报告整个系统的进程、内存、分页、块 I/O、中断和 CPU 活动。它可帮助管理员确定 I/O 子系统是否负责任何性能问题。如果使用 vmstat 进行分析显示,I/O 子系统负责降低性能,管理员可以使用 iostat 工具来确定负责的 I/O 设备。
常用命令:
vmstat 1
每1秒采集一次。
# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st0 0 0 14492940 93516 1050928 0 0 0 0 0 2 0 0 100 0 00 0 0 14492940 93516 1050928 0 0 0 0 7 40 0 0 100 0 00 0 0 14492940 93516 1050928 0 0 0 0 4 36 0 0 100 0 0
vmstat 1 -t
每1秒采集一次,并打印时间戳。
# vmstat 1 -t
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----r b swpd free buff cache si so bi bo in cs us sy id wa st CST0 0 0 14495244 93516 1050928 0 0 0 0 0 2 0 0 100 0 0 2023-08-17 17:14:350 0 0 14495244 93516 1050928 0 0 0 0 4 36 0 0 100 0 0 2023-08-17 17:14:360 0 0 14495244 93516 1050928 0 0 0 0 5 36 0 0 100 0 0 2023-08-17 17:14:370 0 0 14495244 93516 1050928 0 0 0 0 15 76 0 0 100 0 0 2023-08-17 17:14:380 0 0 14495244 93516 1050928 0 0 0 0 5 34 0 0 100 0 0 2023-08-17 17:14:390 0 0 14495244 93516 1050928 0 0 0 24 6 40 0 0 100 0 0 2023-08-17 17:14:400 0 0 14495244 93516 1050928 0 0 0 0 5 38 0 0 100 0 0 2023-08-17 17:14:41
iostat
iostat
报告您系统中的 I/O 设备负载。它由 sysstat 软件包提供。
常用命令:
iostat -dxm 1
每1秒采集一次设备IO信息,并以MB为单位输出。
# iostat -dxm 1
Linux 3.10.0-1160.42.2.el7.x86_64 (c1-121) 08/17/2023 _x86_64_ (2 CPU)Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.01 0.01 0.06 0.00 0.00 21.77 0.00 2.70 5.06 2.44 0.46 0.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 114.22 0.00 0.22 0.22 0.00 0.22 0.00
dm-0 0.00 0.00 0.01 0.07 0.00 0.00 19.87 0.00 2.77 5.94 2.50 0.44 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 50.96 0.00 1.01 1.01 0.00 0.91 0.00Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
blktrace
blktrace
提供有关 I/O 子系统花费时间的详细信息。
blkparse
读取来自 blktrace 的原始输出,并生成由 blktrace 记录的输入和输出操作的人类可读摘要。
btt
分析 blktrace 输出并显示 I/O 堆栈各个区域所花费的时间,从而更轻松地发现 I/O 子系统中的瓶颈。该实用程序作为 blktrace 软件包的一部分提供。
使用方法:
blktrace /dev/sdb
blkparse -i sdb -d sdb.bin >>sdb.txt
btt -i sdb.bin
bpftrace
BPF Compiler Collection(BCC)是一个库,可帮助创建扩展的 Berkeley Packet Filter(eBPF)程序。eBPF 程序在事件中触发,如磁盘 I/O、TCP 连接和进程创建。BCC 工具安装在 /usr/share/bcc/tools/ 目录中。以下 bcc-tools 可帮助分析性能:
biolatency
总结了块设备 I/O(磁盘 I/O)中延迟的问题。这允许研究发行版,包括用于设备缓存命中以及缓存未命中的两种模式,以及延迟延迟。biosnoop
是基本的块 I/O 追踪工具,用于显示每个 I/O 事件以及发出的进程 ID,以及 I/O 延迟。使用这个工具,您可以调查磁盘 I/O 性能问题。biotop
用于内核中的块 i/o 操作。filelife
工具跟踪 stat() 系统调用。fileslower
跟踪文件同步的读写速度比较慢。 filetop 按进程显示文件读取和写入。ext4slower
、nfsslower
和xfsslower
是显示文件系统操作比特定阈值慢的工具,默认值为 10ms。
相关介绍见《bcc-tools Linux运维中的要你命3000》