iostat 命令

2023-11-17

iostat 命令主要通过观察物理磁盘的活动时间以及他们的平均传输速度,监控系统输入 / 输出设备负载。

    根据 iostat 命令产生的报告,用户可确定一个系统配置是否平衡,并据此在物理磁盘与适配器之间更好地平衡输入 / 输出负载。iostat 工具的主要目的是通过监控磁盘的利用率,而探测到系统中的 I/O 瓶颈。不同操作系统命令格式输出格式略有不同,管理员可以通过查看用户手册来确定它的用法。

iostat安装

apt-get install sysstat
yum install sysstat
tar包下载地方:http://pagesperso-orange.fr/sebastien.godard/sysstat-9.1.1.tar.g

一、磁盘I/O性能指标

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

1.每秒 I/O 数( IOPS 或 tps)

对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。当传输小块不连续数据时,该指标有重要参考意义。

2.吞吐量( Throughput)

指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为 Kbps, MB/s 等。当传输大块不连续数据的数据,该指标有重要参考作用。

3.平均 I/O 数据尺寸

平均 I/O 数据尺寸为吞吐量除以 I/O 数目,该指标对揭示磁盘使用模式有重要意义。一般来说,如果平均 I/O 数据尺寸小于 32K,可认为磁盘使用模式以随机存取为主;如果平均每次 I/O 数据尺寸大于 32K,可认为磁盘使用模式以顺序存取为主。

4.磁盘活动时间百分比( Utilization) %util

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

5.服务时间( ServiceTime) svctm

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

6.I/O 等待队列长度( Queue Length)

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

7.等待时间( Wait Time)

指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果 I/O 请求持续超出磁盘处理能力,意味着来不及处理的 I/O 请求不得不在队列中等待较长时间。通过监控以上指标,并将这些指标数值与历史数据,经验数据以及磁盘标称值对比,必要时结合 CPU、内存、交换分区的使用状况,不难发现磁盘 I/O潜在或已经出现的问题。但如果避免和解决这些问题呢?这就需要利用到磁盘 I/O 性能优化方面的知识和技术。限于本文主题和篇幅,仅列出一些常用的优化方法供读者参考:

  1)调整数据布局,尽量将 I/O 请求较合理的分配到所有物理磁盘中;

  2)对于 RAID 磁盘阵列,尽量使应用程序 I/O 等于条带尺寸或者为条带尺寸的倍数。并选取合适的 RAID 方式,如 RAID10, RAID5;

  3)增大磁盘驱动程序的队列深度,但不要超过磁盘的处理能力,否则,部分 I/O 请求会因为丢失而重新发出,这将降低性能;

  4)应用缓存技术减少应用存取磁盘的次数,缓存技术可应用在文件系统级别或者应用程序级别;

  5)由于多数数据库中已包括经优化后的缓存技术,数据库 I/O 宜直接存取原始磁盘分区( rawpartition)或者利用绕过文件系统缓存的 DIO 技术( direct IO);

  6)利用内存读写带宽远比直接磁盘 I/O 操作性能优越的特点,将频繁访问的文件或数据置于内存中。

二、iostat 使用

命令格式:

iostat [-c|-d] [-k] [-t] [间隔描述] [检测次数]
-c : 仅显示 cpu的状态
 
-d : 仅显示存储设备的状态,不可以和 -c一起使用
 
-k : 默认显示的是读入读出的 block信息,用 -k可以改成 KB大小来显示
 
-t: 显示日期
 
-p device | ALL : device为某个设备或者某个分区,如果使用 ALL,就表示要显示所有分区和设备的信息


三、简单介绍

iostat -d -k 10
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。

iostat -d -k 2 10
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              39.29        21.14         1.44  441339807   29990031
sda1              0.00         0.00         0.00       1623        523
sda2              1.32         1.43         4.54   29834273   94827104
sda3              6.30         0.85        24.95   17816289  520725244
sda5              0.85         0.46         3.40    9543503   70970116
sda6              0.00         0.00         0.00        550        236
sda7              0.00         0.00         0.00        406          0
sda8              0.00         0.00         0.00        406          0
sda9              0.00         0.00         0.00        406          0
sda10            60.68        18.35        71.43  383002263 1490928140


输出解释:
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to 
the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
上面的例子中,可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)

指定监控的设备名称为sda,该命令的输出结果和上面命令完全相同。

iostat -d sda 2        //默认监控所有的硬盘设备,现在指定只监控sda。 

-x选项iostat还有一个比较常用的选项-x,该选项将用于显示和io相关的扩展数据;

Linux 2.6.32-696.6.3.el6.x86_64 (localdomain)     07/19/2018     _x86_64_    (1 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.01     0.12    0.02    0.11     1.30     1.84    23.21     0.00    8.00    4.44    8.75   3.09   0.04


输出含义:

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。

rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。    
await:  每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
         这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm    表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,         系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)
-c选项

iostat还可以用来获取cpu部分状态值:

iostat -c 1 10
Linux 2.6.32-696.6.3.el6.x86_64 (localdomain)     07/19/2018     _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                  0.10     0.00      0.10         0.03      0.00   99.77

常见用法:
iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态
另外还有一个非常棒的用法
假如我要执行iostat这个命令来查看cpu与存储设备状态,可是执行却发现没有这个命令
于是执行yum install iostat,结果说找不到该软件,使用下面的办法可以解决
yum search iostat就能查到和iostat相关的安装包了,
另外想安装一个程序,只记得一部分名称,也可以用这个办法来实现安装
yum search png |grep png
就能找到我们想安装的libpng这个名称

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iostat 命令 的相关文章

  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • PyPI 上的轮子平台约束有什么限制吗?

    是否有任何地方 PEP 或其他地方 声明关于 Linux 轮子上传范围的限制 PyPI http pypi io 应该有 具体来说 上传是否被认为是可接受的做法linux x86 64轮子到 PyPI 而不是manylinux1 x86 6
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 在 Linux 上访问 main 之外的主要参数

    是否可以访问参数main在外面main 即在共享库构造函数中 在 Linux 上除了通过解析之外 proc self cmdline 您可以通过将构造函数放入 init array部分 功能在 init array 不像 init 使用相同
  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include
  • 用于编辑 /etc/sudoers 文件的正则表达式模式

    我想删除 etc sudoers 文件中的 uncommnet 轮组 那么我应该使用什么正则表达式模式 cat etc sudoers Allows members of the sys group to run networking so
  • 未找到 Gem 命令

    我已经在 Ubuntu 10 10 32 位上安装了 gem apt get install gem y 但当我尝试跑步时 gem install something gem 我收到未找到命令的错误 bash gem command not
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • 如何重命名 .tar.gz 文件而不提取内容并在 UBUNTU 中创建新的 .tar.gz 文件?

    我有一个命令将创建一个新的 tar gz现有文件中的文件 sudo tar zcvf Existing tar gz New tar gz 该命令将创建一个新的New tar gz从现有的文件Existing tar gz file 谁能告
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • 如何反汇编、修改然后重新组装 Linux 可执行文件?

    无论如何 这可以做到吗 我使用过 objdump 但它不会产生我所知道的任何汇编器都可以接受的汇编输出 我希望能够更改可执行文件中的指令 然后对其进行测试 我认为没有任何可靠的方法可以做到这一点 机器代码格式非常复杂 比汇编文件还要复杂 实
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码

随机推荐

  • 前后端正常交互的流程

    普及一下前后端正常交互的流程 1 评审阶段 产品召集前后端进行需求评审 前后端各自捋清楚自己的业务量以及联调之间工作量 从而进行开发时间评估 2 开发准备阶段 前后端一起商量需求中需要联调的部分 进行接口的口头协议交流 3 接口定义阶段 前
  • 几种特征选择方法的比较,孰好孰坏?

    在本文中 重点介绍特征选择方法基于评估机器学习模型的特征重要性在各种不可解释 黑盒 及可解释机器学习方法上的表现 比较了CART Optimal Trees XGBoost和SHAP正确识别相关特征子集的能力 无论使用原生特征重要性方法还是
  • mcem r语言代码_R语言面向对象编程:S3和R6

    R语言面向对象编程 S3和R6 2017 06 10 0 R语言面向对象编程 S3和R6 一 基于S3的面向对象编程 基于S3的面向对象编程是一种基于泛型函数 generic function 的实现方式 1 S3函数的创建 S3对象组成
  • 【IT之路】微信小程序之程序精简

    上一篇我们了解了下微信小程序 这次我们来给新创建出来的小程序瘦身 这里保存了日志模块部分和index页面 一 主体文件精简 app js文件精简 app js App onLaunch 展示本地存储能力 const logs wx getS
  • arduino彩灯计时器电路_Arduino UNO 制作LED节日彩灯

    假日季节来临之际 我觉得利用Arduino和全彩LED灯条制作装饰彩灯将会很有趣 这些LED不仅会亮 而且具有多种不同的颜色 能够为您带来多彩的节日气氛 目录 1 LED灯条简介 2 如何连接LED灯条并接线 3 让我们来点亮LED灯吧 1
  • win10系统:VMware无法在Windows运行 解决方法

    win10系统 VMware无法在Windows运行该怎么办 最近使用win10系统的用户反应系统中出现了无法正常运行VMware的现象 在更新了win10系统之后 首先使用的是VMware14之后发现不兼容Windows10 1903 然
  • JAVA中Bean对象的注解

    java中通常对bean对象的注解 Column 和 Id 都是javax persistence包中的 bean 表明这个属性对应数据库中主键字段 Column 是表明这个属性对应数据库中某个字段
  • 这5种必知的大数据处理框架技术,你的项目到底应该使用其中的哪几种

    大数据是收集 整理 处理大容量数据集 并从中获得见解所需的非传统战略和技术的总称 虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限 但这种计算类型的普遍性 规模 以及价值在最近几年才经历了大规模扩展 本文将介绍大数据系统一个最基
  • Hadoop学习笔记之如何运行一个MapReduce程序

    Hadoop学习笔记之如何运行一个MapReduce程序 MapReduce可以分为两个阶段来处理 一个阶段为map 另一个阶段为reduce 每个阶段都有键值对的输入和输出参数 输入输出键值对的类型由程序决定 程序同样指定了两个函数 ma
  • 笔试面试常见函数编程实现

    目录 strcpy strstr memcpy memove Strcmp atoi 最好不要用其他封装的函数 strcpy C语言标准库函数 原型声明 extern char strcpy char dest const char src
  • 使用baiduspider实现一个异步爬虫

    代码仓库 https github com Kakaluoto asnyc spider 爬虫数据收集 1 各文件说明 img 存放爬取的图片 async spider 异步爬虫类 data collector 爬虫执行脚本 从这里启动 i
  • 京东搜索EE链路演进

    导读 搜索系统中容易存在头部效应 中长尾的优质商品较难获得充分的展示机会 如何破除系统的马太效应 提升展示结果的丰富性与多样性 助力中长尾商品成长是电商平台搜索系统的一个重要课题 其中 搜索EE系统在保持排序结果基本稳定的基础上 通过将优质
  • 多工程项目打包成功,运行失败(仅参考)

    打包了好几次 成功了 但到了线上运行了 当然这样看是看不出来的 看了error log 是找不到某个类 解决方案 多工程项目打包 最好用root的package 会打包所有工程
  • 【满分】【华为OD机试真题2023 JAVA&JS】取出尽量少的球

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 取出尽量少的球 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 某部门开展Family Day开放日活动 其中有个从桶里取球的游戏 游戏规则如下 有N个容量一样的小
  • vue 中 的scroll插件vuescroll

    vuescroll 官网 https vuescrolljs yvescoding org zh guide configuration html detectresize 主要配置如下 在data里面 ops vuescroll mode
  • angular 根据当前日期显示本周,上周,本月,上月,本季度,本年度时间段

    angular Date处理模块 根据当前日期获取本周 上周 本月 上月等时间段 知识准备 Date对应方法 getDate 返回月中的第几天 从 1 到 31 getDay 返回星期几 0 6 setDate day 设置 Date 对象
  • 【c语言】malloc函数详解

    谈到malloc函数相信学过c语言的人都很熟悉 但是malloc底层到底做了什么又有多少人知道 1 关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果 也可以这样认为 window下 原型 ext
  • 关于多线程与CPU时间片

    几个知识点 进程是操作系统分配资源的基本单位 很明显在 proc pid目录下你可以看到每一个进程的详细信息 资源情况 但是你却找不到线程的资源信息 那是因为线程是共享了进程的资源 线程是操作系统调度的基本单位 我们打开top命令看到的 t
  • 创建Vue脚手架&分析脚手架结构

    一 初始化脚手架 1 1 说明 1 Vue 脚手架是 Vue 官方提供的标准化开发工具 开发平台 2 最新的版本是 4 x 3 文档 Vue CLI 1 2 具体步骤 第一步 仅第一次执行 全局安装 vue cli npm install
  • iostat 命令

    iostat 命令主要通过观察物理磁盘的活动时间以及他们的平均传输速度 监控系统输入 输出设备负载 根据 iostat 命令产生的报告 用户可确定一个系统配置是否平衡 并据此在物理磁盘与适配器之间更好地平衡输入 输出负载 iostat 工具