对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。

下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。

1.不加选项执行iostat

我们先来看直接执行iostat的输出结果:

linux # iostat
Linux 2.6.16.60-0.21-smp (linux) 06/12/12 avg-cpu: %user %nice %system %iowait %steal %idle
0.07 0.00 0.05 0.06 0.00 99.81 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.58 9.95 37.47 6737006 25377400
sdb 0.00 0.00 0.00 824 0

单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:

avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值

Device: 各磁盘设备的IO统计信息

对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。Device中各列含义如下:

  • Device: 以sdX形式显示的设备名称
  • tps: 每秒进程下发的IO读、写请求数量
  • Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
  • Blk_wrtn/s: 每秒写扇区数量
  • Blk_read: 取样时间间隔内读扇区总数量
  • Blk_wrtn: 取样时间间隔内写扇区总数量

我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。

2.指定采样时间间隔与采样次数

与sar命令一样,我们可以以"iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:

linux # iostat -d 1 2
Linux 2.6.16.60-0.21-smp (linux) 06/13/12 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.55 8.93 36.27 6737086 27367728
sdb 0.00 0.00 0.00 928 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 2.00 0.00 72.00 0 72
sdb 0.00 0.00 0.00 0 0

以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。

3.kB为单位显示读写信息(-k选项)

我们可以使用-k选项,指定iostat的部分输出结果以kB为单位,而不是以扇区数为单位:

linux # iostat -d -k
Linux 2.6.16.60-0.21-smp (linux) 06/13/12 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.55 4.46 18.12 3368543 13686096
sdb 0.00 0.00 0.00 464 0

以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)

4.更详细的io统计信息(-x选项)

为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:

linux # iostat -x -k -d 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

以上各列的含义如下:

  • 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队列非空的时间比率

对于以上示例输出,我们可以获取到以下信息:

  1. 每秒向磁盘上写30M左右数据(wkB/s值)
  2. 每秒有91次IO操作(r/s+w/s),其中以写操作为主体
  3. 平均每次IO请求等待处理的时间为120.57毫秒,处理耗时为6.33毫秒
  4. 等待处理的IO请求队列中,平均有11.79个请求驻留

以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:

util = (r/s+w/s) * (svctm/1000)

对于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603

参考:http://www.cnblogs.com/bangerlee/articles/2547161.html

使用iostat分析IO性能的更多相关文章

  1. Linux 使用iostat分析IO性能

    原文:http://www.cnblogs.com/bangerlee/articles/2547161.html 对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量 ...

  2. 利用BLKTRACE分析IO性能

    在Linux系统上,如果I/O发生性能问题,有没有办法进一步定位故障位置呢?iostat等最常用的工具肯定是指望不上的,[容易被误读的iostat]一文中解释过await表示单个I/O所需的平均时间, ...

  3. [转] 利用BLKTRACE分析IO性能

    在Linux系统上,如果I/O发生性能问题,有没有办法进一步定位故障位置呢?iostat等最常用的工具肯定是指望不上的,[容易被误读的iostat]一文中解释过await表示单个I/O所需的平均时间, ...

  4. 通过iostat来查看linux硬盘IO性能|实例分析

    iostat查看linux硬盘IO性能 rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wm ...

  5. Linux的IO性能监控工具iostat详解

    Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以提供更丰富的IO性能状态数据. . 基本使用 $iostat - ...

  6. Centos硬盘IO性能检测命令iostat[转]

    Centos硬盘IO性能检测命令iostat[转] 在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都 ...

  7. Linux IO性能分析blktrace/blk跟踪器

    关键词:blktrace.blk tracer.blkparse.block traceevents.BIO. 本章只做一个记录,关于优化Block层IO性能方法工具. 对Block层没有详细分析,对 ...

  8. 018 磁盘 IO 性能监控/压测工具(sar、iotop、fio、iostat)

    1 sar 命令查看当前磁盘 IO 读写 sar(System Activity Reporter 系统活动情况报告)是 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告 ...

  9. 磁盘工作原理与IO性能分析

    最近,在研究如何优化产品设备的磁盘IO性能,需要深入研究磁盘及文件系统原理和工作机制,下面简要总结下关于磁盘方面的东西,下篇文章再分享文件系统的. 机械磁盘结构: 无论哪种机械硬盘,都主要由盘片.磁头 ...

随机推荐

  1. C#基础--面向过程计算器

    //面向过程计算器 //思路: 需要注意的是: 两个数相除 除数不能为0: //1.提示用户输入 //2.进行运算 //3.得到结果 Console.WriteLine("请输入第一个数字: ...

  2. OkHttp+Stetho+Chrome调试android网络部分

    如果要达到上面的效果,你需要改造你的网络请求模块,使用Chrome浏览器和android程序之间的中间件来连接,这就是本篇要介绍的主题:OkHttp+Stetho+Chrome进行网络调试. okht ...

  3. Git ~ 管理修改 ~ Gitasd

    现在假设你一经常我了暂存区的概念 , 下面我们将要讨论的就是 , 为什么 Git 比其他的版本控制系统设计的优秀 , 因为 Git 跟踪管理的是修改而非文件 什么是修改  ? 修改就是 你在某个地方 ...

  4. 封装数据库mysql, mysqli

    <?php header("content-type:text/html;charset=utf-8"); class db{    //私有的静态属性    private ...

  5. PHP中的文件下载

    文件下载:用<a href="链接"></a>这种是下载,但对于浏览器能解释的文件类型此下载非彼下载.向服务器请求的时候:1.协议和版本2.头信息3.请求的 ...

  6. min-height最小高度的实现(兼容IE6、IE7、FF)(解决IE6不兼容min-height)

    <!doctype html><html> <head> <meta charset="UTF-8"> <meta name= ...

  7. CentOS 6.6 nginx install

    /************************************************************************* * CentOS 6.6 nginx instal ...

  8. mysql [ERROR] Can't create IP socket: Permission denied

    /*************************************************************************** * mysql [ERROR] Can't c ...

  9. SFTP 上传文件夹

    使用sftp上传文件夹时若使用如下命令并不work: put /media/Research/GWAS_Class/* Desktop/ 此时,需要添加一个参数 -r, 另外在目标文件夹下面建立一个同 ...

  10. java读取文件夹下所有文件并替换文件每一行中指定的字符串

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...