前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux IO 问题分析利器--iostat

Linux IO 问题分析利器--iostat

作者头像
用户1278550
发布2019-07-17 17:59:03
5.3K0
发布2019-07-17 17:59:03
举报
文章被收录于专栏:idbaidba

一 前言

最近做数据库服务器的压测,观察数据库性能,同时也要关注磁盘的io具体表现。分析数据时会用到2个工具 iostat,本文重新温习一下该工具的用法。

二 iostat

在排查分析io问题时,可以使用iostat查看磁盘的IO性能状态数据。

2.1 参数介绍

iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]

常用参数

代码语言:javascript
复制
-c: 输出cpu统计信息
-d: 输出磁盘统计信息     注:默认是两个都输出
-k|-m: 以kb/s|mb/s代替原来的块/s
-t: 输出时打印收集信息时刻的时间   注:时间的打印格式和系统变量S_TIME_FORMAT相关
-x: 输出详细的拓展统计数据,比如各种等待时间,队列,利用率等信息。
interval [count] :interval是统计的时间间隔单位是s,count则是统计次数
2.2 输出解释

常使用命令

iostat -kx 1

代码语言:javascript
复制
rrqm/s:IO设备每秒读取请求有多少被merge。
wrqm/s:IO设备每秒写入请求有多少被merge。

注:当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并merge
r/s:IO设备每秒的发起的读请求次数
w/s:IO设备每秒的写请求次数
rkB/s:每秒读K字节数
wkB/s:每秒写K字节数
avgrq-sz:发送到设备的请求的平均大小,单位是扇区。
avgqu-sz:平均请求队列的长度,队列长度越短越好。也是我们观察磁盘性能的核心指标。 
r_await:每个读请求耗费的平均时间,该时间等于IO设备读操作的时间和在队列中等待的时间。
w_await:每个写请求耗费的平均时间,该时间等于IO设备读操作的时间和在队列中等待的时间。   
await:每个IO请求的处理的平均时间(以毫秒为单位)。
svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
%util:在统计时间内所有处理IO时间,除以总共统计时间。表示该设备的繁忙程度。例如,如果统计间隔1秒,该设备有0.5秒在处理IO,而0.5秒闲置,则该设备的%util = 0.5/1 = 50%。一般地,如果该参数是100%表示设备已经接近满负荷运行。

这里重点说一下 await ,svctm

关于 await和svctm

可以理解为IO请求的响应时间,包括队列等待时间和服务时间,我们分析IO问题时,如果await大于svctm,await-svctm差值越小,则说明队列时间越短, 反之差值越大,队列时间越长,说明磁盘io有性能问题。

需要注意到是

man 手册里面有注释 Warning! Do not trust this field any more. This field will be removed in a future sysstat version. 该参数的计算方式依赖 util,而util其实不一定准确。因为util的计算方式未考虑并行处理io请求。详细的介绍请参考 《辩证看待 iostat》

2.3 常用命令

每隔2秒,显示一次设备统计信息, 可以看到全部设备的tps.

iostat -d -k 1

查看指定设备 sdb磁盘的io统计信息,每秒展示一次输出。

iostat -xk sdb 1

2.4 await多大才算有问题

如前面介绍所说,await是单个I/O所消耗的时间,包括硬盘设备处理I/O的时间和I/O请求在kernel队列中等待的时间,正常情况下队列等待时间可以忽略不计,姑且把await当作衡量硬盘速度的指标吧,那么多大算是正常呢?对于SSD,从0.0x毫秒到1.x毫秒不等。在以下实例中,sdb是10块960G SSD做raid5,await是0.36毫秒,符合预期。

代码语言:javascript
复制
Device: rrqm/s wrqm/s r/s w/s       rkB/s wkB/s     avgrq-sz avgqu-sz await r_await w_await  svctm  %util
sdb     0.00 0.00 2.00 12525.00 32.00 105536.00 16.85 4.46 0.36 1.00 0.36 0.03 35.90

对磁盘阵列来说,因为有硬件缓存,写操作不等落盘就算完成,所以写操作的service time大大加快了,如果磁盘阵列的写操作不在一两个毫秒以内就算慢的了;读操作则未必,不在缓存中的数据仍然需要读取物理硬盘,单个小数据块的读取速度跟单盘差不多。

总结

虽然说iostat输出中 util 和srctm不一定准确,我们依然可以借助await 和 avgqu-sz的值合理的分析磁盘的io情况。然后结合系统的配置比如raid 卡,磁盘IO调度策略逐步分析。

推荐阅读

容易被误读的IOSTAT

代码语言:javascript
复制
http://linuxperf.com/?p=156

辩证看待 iostat

代码语言:javascript
复制
https://zhuanlan.zhihu.com/p/33417860
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二 iostat
    • 2.1 参数介绍
      • 2.2 输出解释
        • 2.3 常用命令
          • 2.4 await多大才算有问题
          • 总结
          • 推荐阅读
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档