IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    【转载】主机IO错误或超时失败案例分享

    rock发表于 2014-12-09 10:51:59
    love 0
    • 客户描述:
      感到业务运行速度缓慢。

    • 工程师描述:

    • 登录主机,查看IO情况,执行iostat -x -d 30,查看磁盘的读写状态数据await(平均等待时间)和util(利用率),一般观察时间为30S。

    主机IO错误或超时失败案例分享 - zhuzhu - 五事九思 (大连Linux主机维护)

    • 分析解决:
      确认sddg硬盘在统计数据中出现await在一段时间明显大于其他硬盘且util值为100% 。可以看出该盘性能明显低于其他盘,该硬盘为慢盘。
      直接更换该硬盘。测试后问题解决
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    好了由上面我们引入了iostat这个工具当然还有它的兄弟mpstat就像我们常用的数据收集工具sar一样,mpstat和iostat也是由sysstat这个软件包提供。


    iostat:生成三种类型的报告中,CPU使用率报告,设备利用率报告和网络文件系统(NFS)的报告。

    mpstat:生成处理器相关的统计数据。你可以配置LANG=C 使它提供24小时制的显示。


    iostat简单介绍iostat会显示从系统开机到当前执行时刻的统计信息。

    1.不加任何选项执行iostat

    [root@rhel6 ~]# iostat

    blob.png
    以上输出中,除最上面指示系统内核版本、主机名和日期的一行外,另有两部分:

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

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

    对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。

    Device中各列含义如下:

    Device: 以sdX形式显示的设备名称

    tps: 每秒进程下发的IO读、写请求数量

    Blk_read/s: 每秒读block数量(一般一个block为512bytes)

    Blk_wrtn/s: 每秒写block数量

    Blk_read: 取样时间间隔内读block总数量

    Blk_wrtn: 取样时间间隔内写block总数量

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


    2.iostat默认是用block为单位显示,我们可以用megabytes为单位显示读写信息(-m)

    [root@rhel6 ~]# iostat -d -m

    blob.png

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

    [root@rhel6 ~]# iostat -x -m

    Linux 2.6.32-220.el6.x86_64 (rhel6) 11/06/2014 _x86_64_ (4 CPU)

    avg-cpu: %user %nice %system %iowait %steal %idle

    0.12 0.00 0.11 0.29 0.00 99.47

    Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %uti

    sda 11.83 27.48 4.25 0.48 0.06 0.11 75.03 0.11 22.84 2.08 0.98

    sdb 0.04 1.77 0.09 0.53 0.01 0.01 49.33 0.01 12.69 7.45 0.46

    以上各列的含义如下:

    rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并

    wrqm/s: 每秒对该设备的写请求被合并次数r/s: 每秒完成的读次数

    w/s: 每秒完成的写次数rMB/s: 每秒读数据量(MB为单位)

    wMB/s: 每秒写数据量(MB为单位)avgrq-sz:平均每次IO操作的数据量(扇区数为单位)

    avgqu-sz: 平均等待处理的IO请求队列长度

    await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)

    svctm: 平均每次IO请求的处理时间(毫秒为单位)

    %util: 采用周期内用于IO请求利用率,但这个利用率到100%时为饱和


    对于以上示例输出,我们可以获取到以下信息:比如sda磁盘

    1. 每秒向磁盘上写0.48左右数据(wMB/s值)

    2. 每秒平均有5次IO操作(r/s+w/s),其中以读操作为主体

    3. 平均每次IO请求等待处理的时间为22.84毫秒,处理耗时为2.08毫秒

    4. 等待处理的IO请求队列中,平均有0.11个请求驻留

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

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

    对于上面的例子有:util = (4.25+0.48)*(2.08/1000) =0.0098384 ==》%0.98


    mpstat简单介绍 比如我们想列出CPU0的统计信息


    [root@rhel6 ~]# mpstat -P 0
    Linux 2.6.32-220.el6.x86_64 (rhel6) 11/06/14 _x86_64_ (4 CPU)

    20:44:38 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle

    20:44:38 0 0.21 0.00 0.07 0.23 0.00 0.01 0.00 0.00 99.48



沪ICP备19023445号-2号
友情链接