通过『iostat -dx 1』命令监控IO性能

标签: 系统运维 | 发表时间:2011-07-15 14:51 | 作者:老王 tangfl
出处:http://www.blogread.cn/it/

标签:  IO  iostat  监控

    网站的很多性能问题最终都会归结到IO头上,所以说理解iostat命令是非常有必要的。

    小技巧:你知道iostat是从哪里得到IO相关信息的吗?使用strace命令能跟踪到答案:

shell> strace -eopen iostat
open("/proc/diskstats", O_RDONLY)

    注:关于diskstats的说明,参见官方文档(field1 ~ field11)。

    我最常用的iostat命令格式是:『iostat -dx 1』,意思是每隔一秒显示一次IO扩展信息。

shell> iostat -dx 1
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s
sda               0.18    37.71  0.65  2.63    50.18   322.08
                avgrq-sz avgqu-sz   await  svctm  %util
                  113.46     0.35  107.49   1.67   0.55

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s
sda               0.00  4208.00  0.00 165.00     0.00 163872.00
                avgrq-sz avgqu-sz   await  svctm  %util
                  993.16   119.54 1144.36   6.07 100.10

    注:开头显示的是自系统启动开始的平均值,后面显示的是每段时间间隔里的平均值。

    介绍一下相关参数的含义:

  • rrqm/s:队列中每秒钟合并的读请求数量
  • wrqm/s:队列中每秒钟合并的写请求数量
  • r/s:每秒钟完成的读请求数量
  • w/s:每秒钟完成的写请求数量
  • rsec/s:每秒钟读取的扇区数量
  • wsec/s:每秒钟写入的扇区数量
  • avgrq-sz:平均请求数据的大小
  • avgqu-sz:平均请求队列的长度
  • await:平均每次请求的等待时间
  • svctm:平均每次请求的服务时间
  • util:设备的利用率
  •     注:建议对照源代码来记忆这些参数都是如何计算出来的。

        关于这些参数,相对重要的是后面几个,具体来说是:util,svctm,await,avgqu-sz:

        util是设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对,比如设备有写缓存)。有时候可能会出现大于100%的情况,这多半是计算时四舍五入引起的。

        svctm是平均每次请求的服务时间。这里有一个公式:(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时svctm=1000/(r/s+w/s),假设IOPS是1000,则svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。

        await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。

        avgqu-sz是平均请求队列的长度。毫无疑问,队列长度越短越好,这就不用多做解释了。

        提醒:如果是RAID等多盘系统,iostat结果的参考价值可能有变化,建议查阅相关资料。

        说明:svctm参数在未来某个版本的iostat会被删除,官方文档是这样描述原因的:

        The average service time (svctm field) value is meaningless, as I/O statistics are calculated at block level, and we don’t know when the disk driver starts to process a request. For this reason, this field will be removed in a future sysstat version.

        另外,有时候iostat会显示一些很离谱的结果,官方FAQ给出了如下的解释:

        Because of a Linux kernel bug, iostat -x may display huge I/O response times (svctm) and a bandwidth utilization (%util) of 100% for some devices. Indeed these devices have a value for the field #9 (beginning after the device name) in /proc/{partitions,diskstats} which is always different from 0, and even negative sometimes. Yet this field should go to zero, since it gives the number of I/Os currently in progress (it is incremented as requests are submitted, and decremented as they finish). To (temporarily) solve the problem, you should reboot your system to reset the counters in /proc/{partitions,diskstats}.

        参考资料:

  • iostat -x
  • How Linux iostat computes its results
  • iostat: (r/s + w/s) * svctm = %util on Linux
  • 您可能还对下面的文章感兴趣:

    1. 实时监控登陆用户的操作(类 FreeBSD 中的 watch) [2011-06-02 13:29:51]
    2. 日本的 Perl 项目 CloudForecast 分布样式监控系统 [2011-05-25 13:48:40]
    3. 批量添加主机到cacti+nagios的监控报警系统中 [2011-04-01 13:17:28]
    4. 使用smartmontools监控磁盘状况 [2011-03-22 23:30:50]
    5. Grid Control监控-进程累积导致的宕机 [2011-03-07 22:57:44]
    6. 网络流量监控软件vnStat [2011-02-09 22:09:13]
    7. Linux下三种常用的流量监控软件对比 [2011-01-30 19:36:51]
    8. ubuntu10.10 使用mrtg监控服务器的cpu、内存、网络等等情况 [2011-01-30 19:36:22]
    9. 企业服务器监控及报警配置打造(ganglia and nagios)-part 1 [2010-12-08 22:13:08]
    10. cacti 增加 Tokyocabinet 监控 [2010-08-15 23:06:50]
    11. Cacti 添加 Nginx 监控 [2010-05-26 13:22:17]
    12. cacti 增加 Mysql 监控 [2010-05-26 13:21:48]
    13. Cacti 添加 Apache 监控 [2010-05-25 22:44:01]
    14. Cacti 添加 Memcached 监控 [2010-05-25 22:43:18]
    15. Mysql监控指南 [2010-05-24 13:11:48]
    16. Oracle如何监控表的DML次数 [2010-04-27 23:33:10]
    17. tbstat:实时监控数据库统计状态的小工具 [2010-01-13 14:07:17]
    18. MySQLMonitor [2009-12-23 09:35:56]
    19. mysql监控工具系列 — mtop [2009-11-29 21:59:47]
    20. 谈谈服务器基础架构工具的选择 [2009-11-27 18:17:05]
    21. 利用Gearman来实现远程监控与管理 [2009-11-06 13:41:03]
    22. 我常用的主机监控shell脚本 [2009-11-06 09:20:27]
    23. Tips: PL/SQL中监控执行进度两种方法 [2009-10-21 09:05:06]
    24. 使用Oracle正则表达式监控应用到数据库的连接情况 [2009-10-19 23:26:18]
    25. 如何监控HP服务器硬件状态 [2009-10-19 15:48:24]
    26. 利用OpenIPMI监控服务器温度 [2009-10-19 15:47:02]
    27. cacti+apache+php+mysql+rrdtool搭建流量监控平台 [2009-10-15 15:28:25]


    相关 [iostat dx 命令] 推荐:

    通过『iostat -dx 1』命令监控IO性能

    - Sean Lee - 火丁笔记
    网站的很多性能问题最终都会归结到IO头上,所以说理解iostat命令是非常有必要的. 小技巧:你知道iostat是从哪里得到IO相关信息的吗. 使用strace命令能跟踪到答案:. 注:Strace教程:5 simple ways to troubleshoot using Strace. 注:关于diskstats的说明,参见官方文档(主要是其中的field1 ~ field11部分).

    Linux iostat命令

    - - CSDN博客系统运维推荐文章
    iostat用于输出CPU和磁盘I/O相关的统计信息. . iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [. iostat各个参数说明:. -c 仅显示CPU统计信息.与-d选项互斥. -d 仅显示磁盘统计信息.与-c选项互斥.

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

    - - 搜索引擎技术博客
    Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题. 其中iostat可以提供更丰富的IO性能状态数据. 参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次.

    HyperSnap-DX 简体中文绿色特别版 7.20.02

    - - 快乐无极的博客
    HyperSnap-DX 是个屏幕抓图工具,它不仅能抓住标准桌面程序还能抓取 DirectX, 3Dfx Glide 游戏和视频或 DVD 屏幕图. 本程序能以 20 多种图形格式(包括:BMP, GIF, JPEG, TIFF, PCX 等)保存并阅读图片. 可以用热键或自动记时器从屏幕上抓图. 功能还包括:在所抓的图像中显示鼠标轨迹,收集工具,有调色板功能并能设置分辨率,还能选择从 TWAIN 装置中(扫描仪和数码相机)抓图.

    薩爾達傳說:夢見島DX,經典Game Boy遊戲移植HTML5網頁版

    - 培根 - 電腦玩物
    之前曾經介紹過「Zelda II FPS 薩爾達傳說第二代3D變身,第一人稱回味林克冒險」,把薩爾達傳說第二代林克的冒險3D化. 而今天看到另外一個改編移植的網頁遊戲,透過HTML5技術,將「薩爾達傳說:夢見島DX」這款遊戲搬到了網頁上直接遊玩. 「薩爾達傳說:夢見島」最先出現在任天堂知名掌機Game Boy上,可算是薩爾達的外傳作品,有著非常獨特的設定,和薩爾達傳說一貫品質保證的遊戲性.

    Linux wget命令

    - - CSDN博客推荐文章
    wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径. 例如: # wget  http://www.linuxsense.org/xxxx/xxx.tar.gz. 简单说一下-c参数, 这个也非常常见, 可以断点续传, 如果不小心终止了, 可以继续使用命令接着下载.

    lsof命令

    - - Dutor
      lsof, LiSt Opened Files, 列出打开的文件, 听起来很简单的样子. 但想*nix中很多其他工具一样, lsof把这件简单的事情做到了炉火纯青. 因为Unix认为”一切皆文件”, 那么”打开的文件”就不仅仅是传统意义上打开的文件了, 还可以是网络/Unix域套接字, 匿名/具名管道, 共享库文件, 目录文件, 设备文件等等.

    sqlite3命令

    - - 移动开发 - ITeye博客
    转载自: http://www.cnblogs.com/frankliiu-java/archive/2010/05/18/1738144.html. SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令. 本文档提供一个样使用sqlite3的简要说明.

    tcpdump命令

    - - CSDN博客推荐文章
    英文原意是dump traffic on a network ,即截获网络上的数据报,可以根据指定的网络接口来截获不同的数据报. 它会输出在某个网络接口上符合匹配表达式的报内容的描述. 当tcpdump完成抓包后,会打印出类似下面的内容: . 当然,在读取网络上的数据包时,得需要特权,比如linux上的超级用户.