参考
- https://www.cnblogs.com/mauricewei/p/10502539.html
- https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/iostat.html
- https://www.itread01.com/content/1506341064.html
命令
- fio 磁盘测试命令
- iostat 磁盘实时监控命令
- top
- sar
- vmstat
- hdparm
- dd
一 【FIO】 IO测试命令
顺序读:
fio -filename=/mnt/pmfs/1.txt -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
随机写:
fio -filename=/mnt/pmfs/1.txt -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
顺序写:
fio -filename=/mnt/pmfs/1.txt -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=2G -numjobs=1 -runtime=60 -group_reporting -name=mytest
混合随机读写:
fio -filename=/mnt/pmfs/1.txt -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest -ioscheduler=noop
二 【iostat】 磁盘实时监控命令
命令格式 iostat [参数] [间隔秒数] [次数]
iostat #无参使用
iostat -d 1 #间隔1秒
iostat -dk 1 #间隔1秒,单位kb
iostat -dm 1 #间隔1秒,单位Mb
iostat -xmd 1 #间隔1秒,单位Mb ,输出详情
# 其他参数
-C 显示CPU使用情况
-d 显示磁盘使用情况
-k 以 KB 为单位显示
-m 以 M 为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS 使用情况
-p[磁盘] 显示磁盘和分区的情况
-t 显示终端和CPU的信息
-x 显示详细信息
-V 显示版本信息
2.1 普通模式
[root@vm-1 ~]# iostat -d 1
Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1) 06/11/2017 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.08 0.00 0.06 0.00 0.00 99.86
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
vda 0.45 0.29 8.10 6634946 183036680
vdb 0.12 3.11 30.55 70342034 689955328
---
(1) avg-cpu: cpu使用情况
%user : 用户进程的时间百分比。
%nice : 用户模式下,用于nice操作,占用CPU的百分比
%system : 内核进程使用的 CPU 百分比
%iowait : CPU用于等待I/O操作占用CPU总时间的百分比
%steal : 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比
%idle : CPU空闲时间百分比
(2) Device: 各磁盘设备的IO统计信息
Device : 设备名称
tps : 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。
Blk_read/s : 每秒从设备(drive expressed)读取的数据量;
Blk_wrtn/s : 每秒向设备(drive expressed)写入的数据量;
Blk_read : 取样时间内,读扇区总数量
Blk_wrtn : 取样时间内,写扇区总数量
2.2 分析模式
[root@vm-1 ~]# iostat -xkd 1
Linux 2.6.16.60-0.21-smp (linux) 06/13/12
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.60
-- 数据说明
- 每秒向磁盘上写30M左右数据(wkB/s值)
- 每秒有91次IO操作(r/s+w/s),其中以写操作为主体
- 平均每次IO请求等待时间为120.57毫秒,处理时间为6.33毫秒
- 等待处理的IO请求队列中,平均有11.79个请求驻留
列名 | 说明 | 提示 |
---|---|---|
rrqm/s | 每秒合并的读请求数 | 文件系统会对读取同块(block)的请求进行合并 |
wrqm/s | 每秒合并的写请求数 | |
r/s | 每秒完成的读次数 | 合并后的读请求数 |
w/s | 每秒完成的写次数 | 合共后的些请求数 |
rkB/s | 每秒读数据量(kB为单位) | |
wkB/s | 每秒写数据量(kB为单位) | |
avgrq-sz | 平均每次IO操作的数据量(扇区数为单位) | |
avgqu-sz | 平均等待处理的IO请求队列长度 | |
await | 磁盘处理每次IO请求响应、等待时间(平均值) | 包括等待时间和处理时间,毫秒为单位) |
svctm | 磁盘性能参数,每次IO请求处理时间(平均值、推断值) | (毫秒为单位),推断数据,并不完全准确 |
%util | 磁盘处理IO操作的时间百分比 | 使用率,即IO队列非空的时间比率,可能存在并行I/O |
2.3 IO 瓶颈分析
命令形式 iostat -xm 1
6 个关键指标 %util 、%iowait 、%idle、svctm 、 await 、 avgqu-sz
- %util 接近100%,说I/O系统已经满负荷。表明I/O请求太多。(磁盘瓶颈)
- %iowait 值过高,表示硬盘可能存在I/O瓶颈。(需近一步分析是否为高速cpu原因)
- %idle 值过高,表示CPU较空闲。小于70% 压力很大。如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
响应时间 svctm & await 判定磁盘瓶颈
svctm 可理解为磁盘性能。
await 可理解为磁盘处理请求的响应等待时间。
- svctm 接近 await,表示 I/O 没有等待,磁盤性能很好。
- **await 远大于 svctm ** ,表示 I/O 队列太长,io响应太慢。应用程序变慢,更换性能更好的磁盘可解决问题。
- avgqu-sz 比较大,也表示有大量io在等待。
- svctm 大于 15ms ,磁盘设置响应异常。
形象的比喻:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例
设备IO操作:总IO(io)/s = r/s(读) +w/s(写)
平均等待时间=单个I/O服务器时间*(1+2+...+请求总数-1)/请求总数
每秒发出的I/0请求很多,但是平均队列就4,表示这些请求比较均匀,大部分处理还是比较及时。
disk属性值说明:
设备说明 dm-x
设备清单中出现 dm-0,dm-1… , 一般是内核分配设备(dev253)
例如:
[root@vm-1 ~]# iostat -xkd 1
Linux 2.6.16.60-0.21-smp (linux) 06/13/12
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 1.00 0.00 8.00 0.00 0.04 9.00 0.01 0.88 0.62 0.50
dm-0 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
dm-2 0.00 0.00 0.00 9.00 0.00 0.04 8.00 0.01 0.89 0.56 0.50
通过以下命令组合,可知设备对应关系
- sar -d 1 # sar 命令
- cd /dev/mapper/ # 内核分配映射
- ll
# 先使用 sar 命令判断是否为(253) 内核映射
[root@vm-1 ~]# sar -d 1
Linux 2.6.16.60-0.21-smp (linux) 06/13/12
12:33:06 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
12:33:07 AM dev8-0 4.04 0.00 40.40 10.00 0.00 0.75 0.50 0.20
12:33:07 AM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:33:07 AM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:33:07 AM dev253-2 5.05 0.00 40.40 8.00 0.00 0.80 0.40 0.20
# 进入 /dev/mapper/ 目录
[root@vm-1 ~]#cd /dev/mapper/
# 列出设备映射关系
[root@vm-1 ~]#ll
lrwxrwxrwx 1 root root 7 Nov 18 19:13 vg_root-lv_home -> ../dm-2
lrwxrwxrwx 1 root root 7 Nov 18 19:13 vg_root-lv_root -> ../dm-0
lrwxrwxrwx 1 root root 7 Nov 18 19:13 vg_root-lv_swap -> ../dm-1