热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

如何使用iostat查看linux硬盘IO性能

这篇文章主要介绍了如何使用iostat查看linux硬盘IO性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

TOP 观察:IO等待所占用的CPU时间的百分比,高过30%时IO压力高其次、用iostat -x 1 10

[root@controller ~]#iostat -d -k 1 10
Device:     tps  kB_read/s  kB_wrtn/s  kB_read  kB_wrtn
sda       19.00     0.00    112.00     0    112
sda1       0.00     0.00     0.00     0     0
sda2       0.00     0.00     0.00     0     0
sda3       0.00     0.00     0.00     0     0
sda4       0.00     0.00     0.00     0     0
sda5       3.00     0.00    16.00     0     16
sda6       0.00     0.00     0.00     0     0
sda7      16.00     0.00    96.00     0    96

tps:该设备每秒的传输次数,一次传输的意思是“一次I/O请求”

  • kB_read/s:每秒从设备读取的数据量
  • kB_wrtn/s:每秒向设备写入的数据量
  • kB_read:读取的总数据量
  • kB_wrtn :写入的总数量数据量

使用-x获得更多信息

使用-x获得更多信息

查看设备使用率(%util)、响应时间(await)

[root@controller ~]#iostat -d -x -k 1 10
Device:     rrqm/s  wrqm/s  r/s  w/s   rkB/s  wkB/s  avgrq-sz avgqu-sz  await svctm %util
sda        0.00    22.00 0.00 18.00   0.00  160.00  17.78   0.07     3.78  3.78  6.80
sda1       0.00    0.00  0.00 0.00   0.00   0.00   0.00    0.00     0.00  0.00  0.00
sda2       0.00    0.00  0.00 0.00   0.00   0.00   0.00    0.00     0.00  0.00  0.00
sda3       0.00    15.00 0.00 2.00   0.00   68.00  68.00    0.01     6.50  6.50  1.30
sda4       0.00    0.00  0.00 0.00   0.00   0.00   0.00    0.00     0.00  0.00  0.00
sda5       0.00    0.00  0.00 0.00   0.00   0.00   0.00    0.00     0.00  0.00  0.00
sda6       0.00    0.00  0.00 0.00   0.00   0.00   0.00    0.00     0.00  0.00  0.00
sda7       0.00   7.00 0.00 16.00   0.00  92.00  11.50   0.06    3.44  3.44  5.50
  • rrqm/s:每秒进行merge的读操作数目。即delta(rmerge)/s
  • wrqm/s:每秒进行merge的写操作数目。即delta(wmerge)/s
  • r/s:每秒完成的读I/O设备次数。即delta(rio)/s
  • w/s:每秒完成的写I/O设备次数。即delta(wio)/s
  • rsec/s:每秒读扇区数。即delta(rsect)/s
  • wsec/s:每秒写扇区数。即delta(wsect)/s
  • rkB/s:每秒读K字节数。是rsect/s的一半,因为每扇区大小为512字节。(需要计算)
  • wkB/s:每秒写K字节数。是wsect/s的一半。(需要计算)
  • avgrq-sz:平均每次设备I/O操作的数据大小(扇区)。delta(rsect+wsect)/delta(rio+wio)
  • avgqu-sz:平均I/O队列长度。即delta(aveq)/s/1000(因为aveq的单位为毫秒)。
  • await:平均每次设备I/O操作的等待时间(毫秒)。即delta(ruse+wuse)/delta(rio+wio)
  • svctm:平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio)
  • %util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。即delta(use)/s/1000(因为use的单位为毫秒)

如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。

idle小于70%IO压力就较大了,一般读取速度有较多的wait.

同时可以结合vmstat查看查看b参数()和wa参数()

另外还可以参考

svctm 一般要小于await(因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致svctm的增加。await 的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式。如果svctm比较接近await,说明I/O 几乎没有等待时间;如果await远大于svctm,说明I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核elevator 算法,优化应用,或者升级CPU。

队列长度(avgqu-sz)也可作为衡量系统I/O负荷的指标,但由于avgqu-sz是按照单位时间的平均值,所以不能反映瞬间的I/O洪水。

别人一个不错的例子.(I/O系统vs.超市排队)

举 一个例子,我们在超市排队checkout时,怎么决定该去哪个交款台呢?首当是看排的队人数,5个人总比20人要快吧? 除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连 钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能5 分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的5分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。

I/O系统也和超市排队有很多类似之处:

  • r/s+w/s类似于交款人的总数
  • 平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
  • 平均服务时间(svctm)类似于收银员的收款速度
  • 平均等待时间(await)类似于平均每人的等待时间
  • 平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
  • I/O操作率(%util)类似于收款台前有人排队的时间比例。

我们可以根据这些数据分析出I/O请求的模式,以及I/O的速度和响应时间。

%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
)

部署一个程序时(我测试的是一个实时上传日志的程序),对系统的cpu、内存、io等都要有所考虑,保证系统高效的运行。

如果程序本身处理的包特别小,事件很多,压力大且没有间隔的话,占用CPU的资源会很多

如果用磁盘缓存,不用内存缓存的话,能够支持断点重传,保证数据的可靠性上传,如突然断电等情况,存入磁盘缓存的数据等到恢复后会依然上传,而不会丢失,但是相对的也会增加读写磁盘的次数,如果数据量比较小,速度还是可以忍受的。

下面是别人写的这个参数输出的分析

# iostat -x 1
avg-cpu: %user  %nice  %sys  %idle
16.24  0.00  4.31  79.44
Device:        rrqm/s wrqm/s  r/s  w/s   rsec/s wsec/s  rkB/s wkB/s  avgrq-sz avgqu-sz  await svctm %util
/dev/cciss/c0d0   0.00  44.90  1.02 27.55  8.16 579.59   4.08  289.80  20.57  22.35    78.21  5.00 14.29
/dev/cciss/c0d0p1 0.00  44.90   1.02 27.55  8.16 579.59   4.08  289.80  20.57  22.35    78.21  5.00 14.29
/dev/cciss/c0d0p2 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

上面的iostat输出表明秒有28.57次设备I/O操作:总IO(io)/s=r/s(读)+w/s(写)=1.02+27.55=28.57(次/秒)其中写操作占了主体(w:r=27:1)。

平均每次设备I/O操作只需要5ms就可以完成,但每个I/O请求却需要等上78ms,为什么?因为发出的I/O请求太多(每秒钟约29个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:

平均等待时间=单个I/O服务时间*(1+2+…+请求总数-1)/请求总数

应用到上面的例子:平均等待时间=5ms*(1+2+…+28)/29=70ms,和iostat给出的78ms的平均等待时间很接近。这反过来表明I/O是同时发起的。

每秒发出的I/O请求很多(约29个),平均队列却不长(只有2个左右),这表明这29个请求的到来并不均匀,大部分时间I/O是空闲的。

一秒中有14.29%的时间I/O队列中是有请求的,也就是说,85.71%的时间里I/O系统无事可做,所有29个I/O请求都在142毫秒之内处理掉了。

delta(ruse+wuse)/delta(io) =await=78.21=>delta(ruse+wuse)/s=78.21*delta(io)/s= 78.21*28.57=2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms=2.23,而iostat给出的平均队列长度(avgqu-sz)却为22.35,为什么?!因为 iostat中有bug,avgqu-sz值应为2.23,而不是22.35。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
author-avatar
丁郁翰761891
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有