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. Gradle 安装(Windows)

    一.Gradle 简介 1.1 什么是 Gradle?   Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的 项目自动化构建开源工具.它使用一种基于Groovy的D ...

  2. django--权限(1)初识

    一.权限表结构设计 1.认识权限 生活中处处有权限,比如,腾讯视频开会员才有观看某个最新电影的权限,你有房间钥匙就有了进入这个房间的权限,等等.同样,程序开发过程中也有权限,我们今天说的权限指的是we ...

  3. GTY's gay friends 线段树判断区间是否有相同数字

    http://acm.hdu.edu.cn/showproblem.php?pid=5172 判断一个区间是否为全排列是: 1.区间总和 = (1 + R - L + 1) * (R - L + 1) ...

  4. 类成员函数的重载、覆盖和隐藏区别 (C++)(转)

    类成员函数的重载.覆盖和隐藏区别 (C++)   这是本人第一次写博客,主要是想记录自己的学习过程.心得体会,一是可以方便以后回顾相关知识,二是可以与大家相互学习交流. 关于C++中类成员函数的重载. ...

  5. hide(),show()

    var newstypevalue =$("#newstype option:selected").val();        if(newstypevalue=='0'){   ...

  6. 用cookie实现记住密码

    jsp-4 用cookie实现记住密码 这次就有点简单了 基本是jsp-3的代码但是有些修改 public void login(HttpServletRequest req, HttpServlet ...

  7. Promise 用es5的基础实现

    只实现 then 和 catch function promise(fn) { var state = 'pending'; // 声明函数 var nowResolve = function (ar ...

  8. MVC学习6 学习使用Code First Migrations功能 把Model的更新同步到DB中

     参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-th ...

  9. 移动端真机调试工具--DebugGap (VIDE)

    越来越多的移动端开发工作,需要我们有一个好的调试工具,以解决各类真机才会遇到的BUG,最近使用了一款DebugGap 的工具,非常方便,在这里推荐给大家. 官网地址 DebugGap  . 按需求下载 ...

  10. 9.26<立方网>技术笔试题

    该公司题目感觉不难,算法设计有三道大题. 1.设有m和n两个整数,求它们的最大公约数和最小公倍数. 2.猴子分桃问题,每次分桃多一个,共有五个猴子,问最少有多少个桃子. 3.关于java的题目,有A, ...