先说:磁盘性能指标

先简单描述下常用的磁盘性能指标,用来指导iowait问题分析定位

指标 描述
每秒 I/O 数 一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS =每秒磁盘连续读次数+每秒磁盘连续写次数。传输小块不连续数据时,参考该指标进行衡量
吞吐量 硬盘传输数据流的速度,传输数据速度=读出数据+写入数据。传输大块不连续数据的数据,参考该指标进行衡量
平均 I/O 数据尺寸 为吞吐量除以 I/O 数目,该指标对揭示磁盘使用模式有重要意义。数据尺寸小于 32K,可认为磁盘使用模式以随机存取为主;反之,可认为磁盘使用模式以顺序存取为主。
磁盘活动时间百分比 即磁盘利用率。如果磁盘利用率超过 70%,应用进程将花费较长的时间等待 I/O完成,因为绝大多数进程在等待过程中将被阻塞或休眠。
服务时间 指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关,CPU/mem的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过 20ms,一般可考虑会对上层应用产生影响。
I/O 等待队列长度 指待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的I/O 等待队列长度
等待时间 指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果 I/O 请求持续超出磁盘处理能力,意味着来不及处理的 I/O 请求不得不在队列中等待较长时间。

再说:iowait?

是系统因为io导致的进程wait。系统在做io,导致没有进程在干活,cpu在执行idle进程空转。
所以iowait的产生要满足两个条件:

  • 进程在等待io
  • 等待io时没有进程可运行

iowait实际测量的是cpu时间

  • iowait = (cpu idle time)/(all cpu time)

确认并跟踪问题

linux常用命令中有很多都具备该选项:top、sar、vmstat、mpstat、dstat等等

  1. 查找哪块磁盘正在被写入
    iostat
    命令详解可以参考 linux命令—iostat
  2. 查找引起高I/O wait 对应的进程
    iotop
    命令详解可参考 linux命令—iotop
  3. 查找哪个文件引起的I/Owait
    lsof -p pid
    命令详解可参考 linux命令—lsof
    lsof 命令可以展示一个进程打开的所有文件,或者打开一个文件的所有进程
  4. pt-ioprofile定位负载来源文件(完全可以替代3)
    pt-ioprofile的原理是对某个pid附加一个strace进程进行IO分析
    默认参数下该工具展示的是IO占用的时间
[root@db25440 ~]# pt-ioprofile -p=25129
Thu May 17 18:48:35 CST 2018
Tracing process ID 25129total     pwrite      write      fsync  fdatasync       open filename11.709016   0.000000   2.634413   0.000000   9.074603   0.000000 /my/log/mysql-bin.0012009.093400   2.966219   0.000000   6.127181   0.000000   0.000000 /my/base/ib_logfile30.000419   0.000000   0.000000   0.000000   0.000000   0.000419 /dev/urandom
[root@db25440 ~]# 

对于定位问题更有用的是通过IO的吞吐量来进行定位。使用参数 –cell=sizes,该参数将结果已 B/s 的方式展示出来

[root@db25440 ~]# pt-ioprofile -p=25129 -c=sizes
Thu May 17 18:49:25 CST 2018
Tracing process ID 25129total     pwrite      write      fsync  fdatasync       open filename40917504   40917504          0          0          0          0 /my/base/ib_logfile314300748          0   14300748          0          0          0 /my/log/mysql-bin.0012000          0          0          0          0          0 /dev/urandom
[root@db25440 ~]# 

如果正常运行iowait并不高,突然间高了,可能是系统访问量大了,最大的可能是磁盘满了~
 
当I/O等待时间所占CPU时间的比重很高时,首先检查机器是否正在大量使用交换空间,因为硬盘操作的速度远远低于RAM,所以当系统内存耗尽,开始使用交换空间的时候,系统的性能会受到严重影响。任何想要访问硬盘的操作都要完成与硬盘的I/O交换。所以,故障排除的第一步是看内存是否耗尽,如果是,先解决这个问题。如果还有大量可用的RAM,需要明确哪个进程占用了大部分I/O操作。

iowait高并不一定反应出磁盘存在瓶颈

高速cpu会造成很高的iowait值,但这并不代表磁盘是系统的瓶颈。唯一能说明磁盘是系统瓶颈的方法,就是很高的read/write时间,一般来说超过20ms(这个具体计算一下~linux命令—iostat),就代表了不太正常的磁盘性能。

定位iowait问题相关推荐

  1. hd disk / disk raid / disk io / iops / iostat / iowait / iotop / iometer

    DISK IOPS / Input/Output Operations Per Second http://baike.baidu.com/view/2302083.htm IOPS (Input/O ...

  2. 90%的人会遇到性能问题,如何用1行代码快速定位?

    阿里妹导读:在<如何回答性能优化的问题,才能打动阿里面试官?>中,主要是介绍了应用常见性能瓶颈点的分布,及如何初判若干指标是否出现了异常. 今天,齐光将会基于之前列举的众多指标,给出一些常 ...

  3. Java系统资源消耗定位概述

    通常运行的Java程序遇到性能问题表象是资源消耗过多.外部处理系统的性能不足,或者资源消耗不多,但是程序响应速度却达不到要求. 资源主要消耗在CPU .文件IO.网络IO以及内存方面,机器资源是有限的 ...

  4. linux磁盘高,CentOS 7.2中磁盘iowait过高解决

    (一)简述 每天都收到磁盘iowait告警信息,尤其是日志服务器在进行大量的读写操作过程中,从而造成系统处于崩溃边缘,为查找磁盘iowait由于什么原因造成的以及后续的系统的优化点.CentOS有许多 ...

  5. linux 磁盘 io 瓶颈,记一次服务端 IO 瓶颈问题定位

    背景 近期发现测试平台,数据库读写速度较慢,基于此开始定位性能问题: 备注:因为资源有限,python 服务和数据库 mysql 放在了同一台服务器上 一.资源问题定位 1.先通过 uptime me ...

  6. 一步一步从Linux线程到MySQL慢sql定位

    一步一步从Linux线程到MySQL慢sql定位 原创 o月牙数据库架构师o 2020-08-28 06:15:00 中午了,正在吃着黄焖鸡外卖,突然手机短信声音响了,一看一台mysql数据库服务器的 ...

  7. 【Linux 性能优化】利用perf和CPU使用率定位异常函数

    博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 文章目录 CPU 使用率 进程运行情况查询 使用工具查看CPU使用率 定位导致CPU 使用率过高的函数 perf to ...

  8. 【linux性能优化】定位分析狂打日志的问题

    一.文件系统和磁盘I/O 回顾一下文件系统和磁盘I/O的原理 1.1 文件系统 对存储设备上的文件进行组织管理的一种机制 为了支持各类不同的文件系统,Linux在各种文件系统上抽象了一层虚拟文件系统V ...

  9. CPU平均负载过高检查(iowait负载高)

    文章目录 CPU平均负载过高(iowait高) 1.故障现象 2.对CPU进行排查 3.高I/O Wait问题排障和解决 4. IOwait高的解决方法(优化磁盘) CPU平均负载过高(iowait高 ...

最新文章

  1. Android之View绘制流程源码分析
  2. rsync同步服务实验讲解
  3. 一行代码,搞定浏览器数据库 IndexedDB
  4. 【Matlab 控制】求左右特征向量
  5. qt 判断ctrl键被按下_惊雷!证监会公告,又一家千亿白马股被按下“暂停键”...
  6. MySQL复制性能优化
  7. 嵌入式与单片机之间的关系是什么?
  8. html检查链接正确代码,Groovy脚本检查html坏链接
  9. java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例
  10. 品《阿里巴巴大数据实践-大数据之路》一书(上)
  11. 运行yum update出现一下错误信息
  12. Oracle Database Documentation
  13. unity天空盒渐变,Unity 3D从一个天空盒淡入另一个天空盒
  14. 今日分享:几个好用的文字转语音软件,来看看吧
  15. 【C#】委托,方法回调,匿名函数,拉姆达表达式
  16. android 文件管理 ca,安卓Android手机添加根证书
  17. Quorum入门2.0:Quorum-企业以太坊-开始尝试
  18. 如何将FLV格式视频转换成高清MP4格式方法
  19. React项目案例-影视资源网站
  20. 新手真无线蓝牙耳机怎么选?大神推荐高颜值时尚主流蓝牙耳机推荐

热门文章

  1. 2022.11.13 英语背诵
  2. python 对象转字典及序列化对象相关问题,__dict__!!!!必看,多坑
  3. java中按字母排序_如何在Java中按字母顺序对字符串进行排序
  4. java arraylist 无序_关于Java:按字母顺序排序arraylist(不区分大小写)
  5. 【渝粤教育】国家开放大学2018年春季 8599-22T人际关系学 参考试题
  6. Aspose.Words开发者指南
  7. 【经典】CSS技巧教程资源大全
  8. zynq系列通过XMD进行JTAG调试出错解决方案
  9. 北京退公交卡:网点排队110分钟 黄牛1分钟搞定 (zz)
  10. ubuntu以及其常用软件下载地址