iostat命令可以查看CPU利用率和磁盘性能相关数据,有时候我们会觉得系统响应慢,传数据很慢,这个慢可能是多方面原因导致的,如CPU利用率高、网络差、系统平均负载高甚至是磁盘已经损坏了。对此,系统性能出问题时,磁盘I/O是一个值得重点分析的重要指标。
  命令的使用方法很简单,但是要关注哪些报告值,报告的各个含义是什么,这个是必须要搞清楚的。对于Linux 块I/O不清楚的,可以参看我之前的文章: Linux内核之快I/O层

一、iostat命令使用
1.1 命令默认报告
默认报告CPU和磁盘的使用情况
以 blocks/s(块每秒)的形式报告利用率
默认只报告一次使用情况。可通过传参修改报告时间和次数。如:iostat 2 3,这表示每2秒报告一次,共计报告3次
1.2 常用选项
-c 只显示CPU利用率
-d 只显示磁盘利用率
-p 可以报告出每块磁盘的每个分区的使用情况
-k 以 字节/秒 为单位显示磁盘利用率报告
-x 显示扩张统计
-n 显示NFS(network filesystem)报告

1.3 各个报告结果字段含义
磁盘相关字段(磁盘性能指标)
tps 每秒I/O数(即IOPS。磁盘连续读和连续写之和)

Blk_read/s 每秒从设备读取的数据大小,单位是block/s(块每秒)
Blk_wrtn/s 每秒写入设备的数量,单位是block/s
Blk_read 从磁盘读出的块的总数
Blk_wrtn 写入磁盘的块的总数

kB_read/s 每秒从磁盘读取数据大小,单位KB/s
kB_wrtn/s 每秒写入磁盘的数据的大小,单位KB/s
kB_read 从磁盘读出的数据总数,单位KB
kB_wrtn 写入磁盘的的数据总数,单位KB

rrqm/s 每秒合并到设备的读取请求数
wrqm/s 每秒合并到设备的写请求数

r/s 每秒向磁盘发起的读操作数。
w/s 每秒向磁盘发起的写操作数。
rsec/s 每秒从设备读取的扇区数量。
wsec/s 每秒向设备写入的扇区数量。

avgrq-sz I/O 请求的平均大小,以扇区为单位,扇区个数。
avgqu-sz 向设备发起的I/O 请求队列的的平均队列长度

await I/O 请求的平均等待时间,单位为毫秒。这个时间包括请求队列(这个概念很重要)消耗的时间和为每个请求服务的时间
svctm I/O 请求的平均服务时间,单位为毫秒(这个数据不可信!)
%util 处理 I/O 请求所占用的时间的百分比,即设备利用率。I/O请求期间CPU时间的百分比(即设备的带宽利用率)。当这个值接近100%时,表示磁盘I/O已经饱和

这里有一个比较重要的概念就是请求队列,这点我在之前的文章中已经讲过了,不清楚的可以看文章开头的链接

1.4 常用组合
iostat -d -x
iostat -d 2 10
iostat -d -x 2 10
iostat -d -x -k 2 10

命令后的第一个数字表示报告时间间隔,第二个数字表示报告总次数
我一般用的多的是iostat -d -x ,因为这个报告的数据时从系统开机时的一个整体情况,如果加了时间和次数后,后续报告的数据就是设置的时间内磁盘使用情况变化。如果需要一直观察的话,可以使用iostat -d -x

如:

[root@master dev]# iostat -d -x 2 2
Linux 2.6.32-431.el6.x86_64 (master) 02/22/2017 _x86_64_ (2 CPU)

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
scd0 0.01 0.00 0.01 0.00 0.16 0.00 29.65 0.00 6.35 6.18 0.00
sda 0.39 0.51 1.05 0.31 37.88 6.59 32.62 0.00 2.53 1.04 0.14

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.50 0.00 0.50 0.00 7.96 16.00 0.01 16.00 16.00 0.80

二、磁盘I/O性能监控指标
  磁盘I/O性能主要监控的指标有如下几类:
1. 磁盘吞吐量。硬盘传输数据的能力,传输数据是读、写数据之和。当传输大块不连续数据时,该值可做参考。
吞吐量计算公式:

I/O吞吐量 = IOPS * 平均I/O数据大小(size)

注意:IOPS就是tps,即每秒I/O数
  从公式可以看出,IOPS和平均数据大小越大,吞吐量则越大。

2. IOPS。磁盘每秒的I/O数(读、写之和)。当传输小块不连续数据时,该值可作为参考对象。在iostat报告中,tps=r/s+w/s

3. 数据平均大小。平均 I/O 数据尺寸为吞吐量除以 I/O 数目,该指标对揭示磁盘使用模式有重要意义。一般来说,如果平均 I/O 数据尺寸小于 32K,可认为磁盘使用模式以随机存取为主;如果平均每次 I/O 数据尺寸大于 32K,可认为磁盘使用模式以顺序存取为主。
备注:iostat命令输出的平均尺寸是以扇区为单位的,因此,转换成字节时,应该用 512 x 扇区数

4. 磁盘活动时间比 . 该值对用iostat输出的%util字段,表示磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和处理命令(如寻道)处于活动状态。磁盘利用率与资源争用程度成正比,与性能成反比。也就是说磁盘利用率越高,资源争用就越严重,性能也就越差,响应时间就越长。一般来说,如果磁盘利用率超过 70%,应用进程将花费较长的时间等待 I/O 完成,因为绝大多数进程在等待过程中将被阻塞或休眠。

5. 服务时间。指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关,CPU/ 内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过 20ms,一般可考虑会对上层应用产生影响。

6. I/O 等待队列长度。对用iostat输出的avgqu-sz。指待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过 2,一般认为该磁盘存在 I/O 性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的 I/O 等待队列长度。

7. 等待时间。对应iostat输出的await字段。指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果 I/O 请求持续超出磁盘处理能力,意味着来不及处理的 I/O 请求不得不在队列中等待较长时间。

  这里我重点讲下吞吐量和IOPS(tps)。为什么呢?因为不同的业务场景,所需要的磁盘性能侧重点不同。对于磁盘随机读写频繁的业务,比如图片存取、数据库、邮件服务器等,此类业务吗,IOPS才是关键点。对于顺序读写频繁的业务,需要传输大块数据的,如视频点播、文件同步,关注的是磁盘的吞吐量。——如果平均 I/O 数据尺寸小于 32K,可认为磁盘使用模式是以随机存取为主(关注IOPS);如果平均每次 I/O 数据尺寸大于 32K,可认为磁盘使用模式以顺序存取为主(关注吞吐量)。
  对上述论述可以做一个测试:写10MB文件,一个做法是一次写1024B,写10000次。第二个是一次写1B,写10240000次,测试结果如下:

[root@master dev]# dd if=/dev/zero of=/dev/null bs=1024 count=10000
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.00982995 s, 1.0 GB/s
[root@master dev]# dd if=/dev/zero of=/dev/null bs=1 count=10240000
10240000+0 records in
10240000+0 records out
10240000 bytes (10 MB) copied, 7.95257 s, 1.3 MB/s

从结果看出,写大块数据和写小块数据,吞吐量是不一样的。耗时相差也是很大。

在进行磁盘性能分析时要注意下各个指标之间的关系,结合iostat是要注意换算。

三、 磁盘性能怎么解决?
  关于这点,我能想到的就是以下几种:
1. raid
2. 磁盘缓存、缓冲(内核层面,页高速缓存、缓冲)
3. 利用现有的一些开源软件缓存数据,如redis
  其实牵扯到缓存的话,就是让程序直接和内存打交道,尽量避免去直接访问磁盘。但是有的情况下, 直接I/O(跳过缓存)又是业务所需求的,关于这点,具体问题具体分析吧。。。

四、iostat输出内容参数介绍

[root@host-47-106-141-17 ~]# iostat -d -k -x 1
Linux 3.10.0-693.2.2.el7.x86_64 (host-47-106-141-17) 06/20/2018 _x86_64_ (1 CPU)

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.32 0.05 0.56 0.80 3.80 15.21 1.23 3.41 1.41 3.58 0.67 0.04

对于以上示例输出,我们可以获取到以下信息:
每秒向磁盘上写3.8kb左右数据(wkB/s值)
每秒有0.61次IO操作(r/s+w/s=0.05+0.56),其中以写操作为主体
平均每次IO请求等待时间为3.58毫秒(await),处理时间为0.67毫秒
等待处理的IO请求队列中,平均有1.23(avgqu-sz)个请求驻留

选项 说明
%user CPU在用户态执行进程的时间百分比。
%nice CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比
%system CPU处在内核态执行进程的时间百分比
%iowait CPU用于等待I/O操作占用CPU总时间的百分比
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比
%idle CPU空闲时间百分比
注:
1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
2. 若 %idle 的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量
3. 若 %idle 的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU

选项 说明
rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数.即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数.即 delta(wio)/s
rsec/s: 每秒读扇区数.即 delta(rsect)/s
wsec/s: 每秒写扇区数.即 delta(wsect)/s
rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节.(需要计算)
wkB/s: 每秒写K字节数.是 wsect/s 的一半.(需要计算)
avgrq-sz:平均每次设备I/O操作的数据大小 (扇区).delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O队列长度.即 delta(aveq)/s/1000 (因为aveq的单位为毫秒).
await: 平均每次设备I/O操作的等待时间 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio)
%util:在 I/O 请求发送到设备期间,占用 CPU 时间的百分比。用于体现设备的带宽利用率。

注:
1. avgqu-sz 的值较低时,设备的利用率较高。
2. 当 %util 的值接近 100% 时,表示设备带宽已经占满。
---------------------
作者:东城绝神
来源:CSDN
原文:https://blog.csdn.net/m0_37814112/article/details/80661481
版权声明:本文为博主原创文章,转载请附上博文链接!

---------------------
作者:燕涛
来源:CSDN
原文:https://blog.csdn.net/hankerzero/article/details/56484882
版权声明:本文为博主原创文章,转载请附上博文链接!

Linux磁盘I/O性能监控——iostat的更多相关文章

  1. 【精】Linux磁盘I/O性能监控之iostat详解

    [精]Linux磁盘I/O性能监控之iostat详解 Linux命令详解----iostat 使用iostat分析IO性能

  2. [整]磁盘 I/O 性能监控指标和调优方法

    在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能. 磁盘 I/O 性能监控的指标主要包括: 指标 1:每秒 I/O 数(IOPS 或 t ...

  3. 磁盘 I/O 性能监控指标和调优方法

    在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能.磁盘 I/O 性能监控的指标主要包括:指标 1:每秒 I/O 数(IOPS 或 tps ...

  4. Linux进程管理与性能监控

    1. 进程管理工具 这一节我们介绍进程管理工具: 使用进程管理工具,我们可以查询程序当前的运行状态,或终止一个进程: 任何进程都与文件关联:我们会用到lsof工具(list opened files) ...

  5. Linux系统CPU的性能监控及调优

    前言: 性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的 ...

  6. 磁盘 I/O 性能监控的指标

    指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和.当传输小块不连续数据时,该 ...

  7. Linux服务器集群性能监控之Performance Co-Pilot(PCP)部署

    转载自:https://blog.csdn.net/w84268426/article/details/78431778 在部署PCP时,我用到了两台cent os 7虚拟机. 1.官方安装文档htt ...

  8. linux负载均衡与性能监控

    平均负载是单位时间内, 系统处于可运行状态和不可中断状态的平均进程数( 平均活跃进程数 ) 可运行状体好理解, 就是进程正在运行状态Running和可运行状态Runnable... 这里需要注意的是 ...

  9. linux磁盘IO读写性能优化

    在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以 动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文 ...

随机推荐

  1. Luogu P2290 [HNOI2004]树的计数 Prufer序列+组合数

    最近碰了$prufer$ 序列和组合数..于是老师留了一道题:P2624 [HNOI2008]明明的烦恼 qwq要用高精... 于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可 ...

  2. 新手常见Python运行时错误

    经过整理与在实际中遇到的问题,将新手经常遇到的汇总下,以便自己犯傻又这么干了 1)"SyntaxError :invalid syntax",语法错误 A.查看是否在 if , e ...

  3. Zookeeper问题汇总

    1. 遗留问题 a). zookeeper集群如何保证请求的均匀分布? 2. ZK概念澄清 2.1 ZK节点类型 CreateMode.PERSISTENT //持久节点,该节点客户端断开后不会删除 ...

  4. jackson简单使用案例

    新建Maven项目导入依赖包:jakson <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&quo ...

  5. 在loader程序中涉及到的CPU模式切换

    在实模式下开启4GB的物理内存地址寻址(称之为Big Real Mode) 通过A20快速门(Fast Gate)修改0x90端口的数据, 对其进行置位(类似于打开一个开关), 开启 使用CLI汇编指 ...

  6. Xpath定位绝密版本

    xpath的作用就是两个字“定位”, 运用各种方法进行快速准确的定位,推荐两个非常有用的的firefox工具:firebug和xpath checker 在 XPath 中, 有七种类型的节点:元素. ...

  7. echarts的title和legend重合解决(各种小细节)

    一:关于title与legend重叠 1.重合样子 2.解决办法: legend:{ show: true, top:"6%",//与上方的距离 可百分比% 可像素px }, 3. ...

  8. VUE打包发布后无法访问js、css资源

    在vue开发中,本地测试以及测试环境中都没有遇到问题,当发布生产,有虚拟路径时,便出现js.css均报错404: 首先在config的index.js文件中,将assetsPublicPath修改为' ...

  9. 页面中引入百度地图,实例化后影响html5的表单元素date的上下箭头

    复现步骤: 使用百度地图的JavaScript的API,引入文件地址"http://api.map.baidu.com/api?key=&v=1.1&services=tru ...

  10. Android学习笔记1——Android开发环境配置

    一.JDK配置 Android是基于Java进行开发的,首先需要在电脑上配置JDK(Java Development Kit).在http://www.androiddevtools.cn/下载对应系 ...