1.磁盘读写常见的指标
(1)IOPS(Input/Output Operations per Second)
- 指每秒能处理的I/O个数,表示块存储处理读写(输出/输入)的能力,单位为次,有顺序IOPS和随机IOPS
- 比如100次/秒,那iops就是100次/秒,例如数据库类应用等典型场景重点提升这个指标,下面是阿里云盘性能
(2)吞吐量/带宽(Throughput)
- 是指单位时间内可以成功传输的数据数量,单位为MB/s
- 比如 一个硬盘的读写 IO 是 1MB,硬盘的 IOPS 是 100,那么硬盘总的吞吐率就是 100MB/s
- 带宽 = IOPS * IO大小
- (3)访问时延(Latency)
- 是指IO请求从发出到收到响应的间隔时间,常以毫秒ms或者微妙us为单位
- 硬盘响应时间 = 硬盘访问时间 + IO排队延迟,过高的时延会导致应用性能下降或报错。
- 普通的HDD磁盘,随机IO读写延迟是10毫秒,IO带宽大约100MB/秒,随机IOPS一般在100左右
(4)使用率 Utilization
- 指磁盘处理 I/O 的时间百分比,过高的使用率 ,常规字段 Utilization-缩写%util 表示
- 如超过 80%意味着磁盘 I/O 存在性能瓶颈
(5)I/O 等待队列长度 Queue Length
- 表示等待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,就会增大队列长度
(6)饱和度
- 使用率只考虑有没有IO,不考虑IO的大小;当使用率是100%时,磁盘也可能接收新的IO请求
2.iostat查看系统综合的磁盘IO情况
- 格式:iostat [参数] [时间] [次数]
iostat -p ALL -h
- 参数说明
参数 | 说明 |
-c | 仅显示CPU状态统计信息 |
-d | 仅显示磁盘统计信息 |
-k或者-m | 以kb或者mb为单位显示,常用-h可读性高 |
-p | 指定显示IO的设备,ALL表示显示所有 |
-x | 显示详细信息 |
注意:iostat不能直接得到磁盘饱和度
字段 | 说明 |
r/s | 每秒发送给磁盘的读请求次数,r/s+w/s 是磁盘IOPS |
w/s | 每秒发送给磁盘的写请求次数,r/s+w/s手机磁盘IOPS |
rkB/s | 每秒从磁盘读取的数据量,rkB/s+wkB/s 是吞吐量 |
wkB/s | 每秒向磁盘写入的数据量,rkB/s+wkB/s 是吞吐量 |
r_await | 读请求处理完成等待时间,包括在队列中的等待时间和设备实际处理时间 r_await+w_await ,是RT响应时间 |
w_await | 写请求处理完成等待时间,包括在队列中的等待时间和设备实际处理时间 r_await+w_await ,是RT响应时间 |
aqu-sz | 平均请求队列长度 |
rareq-sz | 平均读请求大小 |
wareq-sz | 平均写请求大小 |
%util | 磁盘处理I/O的时间百分比,表示的是磁盘的忙碌情况;如果>80% 就是磁盘可能处于忙碌状态 一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的 |
3.磁盘IO常见指标和分析命令工具介绍
(1)iotop命令
- 查看当前系统各个进程使用磁盘IO的情况
- 安装:yum -y install iotop
- iotop -o -d 3 每3秒刷新下各个进程磁盘IO情况
参数 | 说明 |
-o | 只显示正在读写磁盘的程序 |
-d | 跟一个数值,表示iotop命令刷新的时间 |
字段 | 说明 |
Total DISK READ | 从磁盘中读取的总速率 |
Total DISK WRITE | 往磁盘里写入的总速率 |
Actual DISK READ | 从磁盘中读取的实际速率 |
Actual DISK WRITE | 往磁盘里写入的实际速率 |
TID | 线程ID,按p可以转换成进程ID |
PRIO | 优先级 |
USER | 线程所有者 |
DISK READ | 进程从磁盘中读取的速率 |
DISK WRITE | 进程往磁盘里写入的速率 |
SWAPIN | 进程swap交换百分比 |
IO> | IO等待所占用的百分比 |
COMMAND | 具体的进程命令 |
- iostats是系统级别的IO监控
- iotop是进程级别的IO监控
(2)案例测试:模拟IO密集型应用,系统是4核
- 终端一 模拟2个磁盘IO进程, 持续600s
stress --hdd 2 --hdd-bytes 6G --timeout 600s
- 终端二 全局
iostat -d -x 1
- 终端三 全局
top
- 终端四 局部
iotop
- 测试结果