linux I/O 监控

参考

  • 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
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值