iostat -mx 1 dm-60 dm-61 dm-62 dm-63 dm-64 dm-65 dm-66 dm-67

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

dm-60 6.00 0.00 235.00 0.00 118.03 0.00 1028.63 0.40 1.69 1.69 0.00 0.74 17.45
dm-61 0.00 0.00 231.50 0.00 112.55 0.00 995.71 0.38 1.63 1.63 0.00 0.70 16.30
dm-62 0.00 0.00 1349.00 0.00 662.08 0.00 1005.14 122.07 92.08 92.08 0.00 0.59 79.10
dm-63 0.50 0.00 1143.00 0.00 560.10 0.00 1003.57 357.50 271.83 271.83 0.00 0.87 100.00
dm-64 0.00 0.00 1268.00 0.00 623.26 0.00 1006.66 151.34 115.45 115.45 0.00 0.62 79.10
dm-65 0.00 0.00 1288.00 0.00 633.29 0.00 1006.98 156.79 121.89 121.89 0.00 0.63 81.10
dm-66 0.00 0.00 230.50 0.00 112.05 0.00 995.54 0.38 1.66 1.66 0.00 0.71 16.35
dm-67 0.00 0.00 241.50 0.00 117.05 0.00 992.65 0.39 1.61 1.61 0.00 0.70 17.00

svctm  值很小,有一块盘的io利用率达到了100%。

查看iostat的manpage,

svctm
The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more. This field will be removed in a future
sysstat version.

发现该指标已经不具备参考性了,怎么判断我这块100%利用率的硬盘,耗时情况怎么样呢,写了个脚本如下:

#!/bin/bash

blktrace -d /dev/$1 -o hh -w 20
blkparse -i hh -d $1.blktrace.bin
btt -i $1.blktrace.bin -o /dev/shm/$1-caq

一个I/O请求进入block layer之后,可能会经历下面的过程:

  • Remap: 可能被DM(Device Mapper)或MD(Multiple Device, Software RAID) remap到其它设备
  • Split: 可能会因为I/O请求与扇区边界未对齐、或者size太大而被分拆(split)成多个物理I/O
  • Merge: 可能会因为与其它I/O请求的物理位置相邻而合并(merge)成一个I/O
  • 被IO Scheduler依照调度策略发送给driver
  • 被driver提交给硬件,经过HBA、电缆(光纤、网线等)、交换机(SAN或网络)、最后到达存储设备,设备完成IO请求之后再把结果发回。

采样了20s,看到底哪里比较忙。取数据如下:

[root@localhost bak]# vi dm-63-caq

==================== All Devices ====================

ALL MIN AVG MAX N
--------------- ------------- ------------- ------------- -----------
Q2Qdm 0.000000025 0.001386351 0.204286857 3553
Q2Cdm 0.001132298 0.104383169 0.264029949 3554

Q2G 0.000000261 0.000003114 0.001671993 3425
G2I 0.000000437 0.000053202 0.003102351 3411
Q2M 0.000000726 0.000001618 0.000004214 129
I2D 0.000000443 0.000224963 0.014763260 3425
M2D 0.000000720 0.000284257 0.008655580 115
D2C 0.001126306 0.104102819 0.254061182 3554

可以看到D2C这一行,已经达到了平均104ms的单个io消耗,而这个是可以衡量硬件指标的。

由于dm-63是一块sas的ssd设备,正常情况下的1143次/s的读,还不应该达到瓶颈,考虑到空间占用也没有达到60%以上,不应该性能这么差。

待进一步排查。

io利用率100%问题的更多相关文章

  1. mysql在高内存、IO利用率上的几个优化点 (sync+fsync) 猎豹移动技术博客

    http://dev.cmcm.com/archives/107 Posted on 2014年10月16日 by liuding | 7条评论 以下优化都是基于CentOS系统下的一些优化整理,有不 ...

  2. MySQL在高内存、IO利用率上的几个优化点

    以下优化都是基于CentOS系统下的一些MySQL优化整理,有不全或有争议的地方望继续补充完善. 一.mysql层面优化 1. innodb_flush_log_at_trx_commit 设置为2设 ...

  3. mongoDb CPU利用率100%的分析和解决

    在公司的项目中,突然出现过一个情况,mongodb 的CPU利用率到达100%,导致服务器这边卡死了,请求了半天无响应,提示请求超时. 因为,当时APP用户可能会在某一个时间段集中的使用,所以,请求量 ...

  4. linux 磁盘io利用率高,分析的正确姿势

    一.背景简介 作为一个DBA难免不了会遇到性能问题,那么我们遇到性能问题该如何进行排查呢?例如我们在高并发的业务下,出现业务响应慢,处理时间长我们又该如何入手进行排查,本片文章将分析io高的情况下如何 ...

  5. MySQL实战45讲学习笔记:第二十九讲

    一.引子 我在第25和27篇文章中,和你介绍了主备切换流程.通过这些内容的讲解,你应该已经很清楚了:在一主一备的双 M 架构里,主备切换只需要把客户端流量切到备库:而在一主多从架构里,主备切换除了要把 ...

  6. IO测试工具之fio详解

    目前主流的第三方IO测试工具有fio.iometer和Orion,这三种工具各有千秋. fio在Linux系统下使用比较方便,iometer在window系统下使用比较方便,Orion是oracle的 ...

  7. TensorFlow如何提高GPU训练效率和利用率

    前言 首先,如果你现在已经很熟悉tf.data+estimator了,可以把文章x掉了╮( ̄▽ ̄””)╭ 但是!如果现在还是在进行session.run(..)的话!尤其是苦恼于GPU显存都塞满了利用 ...

  8. 10个常见触发IO瓶颈的高频业务场景

    摘要:本文从应用业务优化角度,以常见触发IO慢的业务SQL场景为例,指导如何通过优化业务去提升IO效率和降低IO. 本文分享自华为云社区<GaussDB(DWS)性能优化之业务降IO优化> ...

  9. 优化临时表使用,SQL语句性能提升100倍

    [问题现象] 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右.SQL语句如下:SELECT DISTINCT g.*, cp. ...

随机推荐

  1. value toDF is not a member of org.apache.spark.rdd.RDD

    idea显示toDF() 没有这个函数,显示错误: Error:(82, 8) value toDF is not a member of org.apache.spark.rdd.RDD[com.d ...

  2. Windows同时安装Python2、Python3兼容运行

    Python2.Python3可以同时安装在windows上,关键是如何有选择的运行Python2还是Python3.   指定运行版本 如果你有一个Python文件叫 hello.py,那么你可以这 ...

  3. AVFoundation 框架初探究(二)

    接着第一篇总结 系列第一篇地址:AVFoundation 框架初探究(一) 在第一篇的文章中,我们总结了主要有下面几个点的知识: 1.对AVFoundation框架整体的一个认识 2.AVSpeech ...

  4. android应用开发基础知道

    1.理解android linux是由c语言和汇编语言写的操作系统,android是基于linux内核的操作系统.发者可以使用Java或C/C++开发Android应用. 2.android环境搭建 ...

  5. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...

  6. 分享用于学习C++音频处理的代码示例

    与<分享用于学习C++图像处理的代码示例>为姊妹篇. 为了便于学习C++音频处理并研究音频算法, 俺写了一个适合初学者学习的小小框架. 麻雀虽小五脏俱全,仅仅考虑单通道处理. 采用Deco ...

  7. HTML知识点总结之table

    table元素 table用来创建表格,表格也可以用来布局,但是嵌套过于复杂,不利于灵活布局,已经几乎没人用它来布局了. 表格基本上有如下几个标签构成: (1)<table>标签用来创建表 ...

  8. python中的深拷贝和浅拷贝理解

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用.以下分两个思路来分别理解浅拷贝和深拷贝: 利用切 ...

  9. 机器学习笔记4-Tensorflow线性模型示例及TensorBoard的使用

    前言 在上一篇中,我简单介绍了一下Tensorflow以及在本机及阿里云的PAI平台上跑通第一个示例的步骤.在本篇中我将稍微讲解一下几个基本概念以及Tensorflow的基础语法. 本文代码都是基于A ...

  10. Chris Richardson微服务翻译:微服务部署

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署( ...