详解Linux命令iostat

Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。在一个以前看到系统监控工具,总在想那些监控工具的代理,如何收集系统性能信息,io性能,cpu使用,带宽使用等信息,偶然发现,不同系统均提供有性能分析工具的,代理可通过这些命令获取系统性能信息,个人猜测,不知道具体是不是这样的。其中iostat可以给我们提供丰富的IO状态数据,下边就来看一下iostat如何使用,命令能够输出那些信息。

简述

Linux系统中通过iostat我们能查看到系统IO状态信息,从而确定IO性能是否存在瓶颈。

命令安装

iostat是查看Linux系统io是否存在瓶颈顶好用的一个命令,但是由此而系统默认没有安装的,以centos系统为例,看看如何安装iostat命令。

[root@localhost ~]# iostat
-bash: iostat: command not found
[root@localhost ~]# yum install -y sysstat

命令使用

[root@localhost ~]# iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]

iostat 主要有三个操作箱,options 操作项,interval指定统计时间间隔,count总共输出次数

-c 参数,可以用来插卡部分cpu状态信息

[root@localhost ~]# iostat -c
Linux 2.6.32-573.el6.x86_64 (localhost)     06/30/2017   _x86_64_    (4 CPU)
avg-cpu: %user  %nice %system %iowait %steal  %idle
      0.02  0.00  0.00  0.00  0.00  99.98

-k 参数,某些使用block为单位的列强制使用Kilobytes为单位

[root@localhost ~]# iostat -k 1 10
Linux 2.6.32-573.el6.x86_64 (localhost)     06/30/2017   _x86_64_    (4 CPU)
avg-cpu: %user  %nice %system %iowait %steal  %idle
      0.02  0.00  0.00  0.00  0.00  99.98
Device:      tps  kB_read/s  kB_wrtn/s  kB_read  kB_wrtn
sda        0.14     0.04     1.65   969915  41732790
dm-0       0.42     0.04     1.65   936269  41632492
dm-1       0.00     0.00     0.00   19920   62056
dm-2       0.00     0.00     0.00    1001   38212
dm-3       0.00     0.01     0.00   127405    7160
avg-cpu: %user  %nice %system %iowait %steal  %idle
      0.00  0.00  0.00  0.00  0.00 100.00
Device:      tps  kB_read/s  kB_wrtn/s  kB_read  kB_wrtn
sda        4.00     0.00    48.00     0     48
dm-0       12.00     0.00    48.00     0     48
dm-1       0.00     0.00     0.00     0     0
dm-2       0.00     0.00     0.00     0     0
dm-3       0.00     0.00     0.00     0     0

-d 参数,显示设备(磁盘)使用状态

[root@localhost ~]# iostat -d 1 3
Linux 2.6.32-573.el6.x86_64 (localhost)     06/30/2017   _x86_64_    (4 CPU)
Device:      tps  Blk_read/s  Blk_wrtn/s  Blk_read  Blk_wrtn
sda        0.14     0.08     3.31  1939830  83470564
dm-0       0.42     0.07     3.30  1872538  83269968
dm-1       0.00     0.00     0.00   39840   124112
dm-2       0.00     0.00     0.00    2002   76424
dm-3       0.00     0.01     0.00   254810   14320

解释一下输出列表示什么意思:

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的总和)
-x 参数,输出更多详细信息

[root@localhost ~]# iostat -x 1 2
Linux 2.6.32-573.el6.x86_64 (localhost)     06/30/2017   _x86_64_    (4 CPU)
avg-cpu: %user  %nice %system %iowait %steal  %idle
      0.02  0.00  0.00  0.00  0.00  99.98
Device:     rrqm/s  wrqm/s   r/s   w/s  rsec/s  wsec/s avgrq-sz avgqu-sz  await r_await w_await svctm %util
sda        0.00   0.27  0.00  0.14   0.08   3.31  23.78   0.00  0.31  1.51  0.29  0.16  0.00
dm-0       0.00   0.00  0.00  0.41   0.07   3.30   8.13   0.00  2.64  2.05  2.64  0.06  0.00
dm-1       0.00   0.00  0.00  0.00   0.00   0.00   8.00   0.00  2.29  1.61  2.51  0.08  0.00
dm-2       0.00   0.00  0.00  0.00   0.00   0.00   8.01   0.00  19.82  0.64  20.30  0.03  0.00
dm-3       0.00   0.00  0.00  0.00   0.01   0.00  30.85   0.00  0.04  0.02  0.20  0.02  0.00

解释一下 -x参数输出列意思

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

rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second;

await:每一个IO请求的处理的平均时间(单位是毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。

%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

常见用法

iostat -d -k 1 10    #查看TPS和吞吐量信息
iostat -d -x -k 1 10   #查看设备使用率(%util)、响应时间(await)
iostat -c 1 10      #查看cpu状态

使用实例

查看指定磁盘吞吐量和速率

[root@localhost ~]# iostat -d -d 1 1
Linux 2.6.32-573.el6.x86_64 (localhost)     06/30/2017   _x86_64_    (4 CPU)
Device:      tps  Blk_read/s  Blk_wrtn/s  Blk_read  Blk_wrtn
sda        0.14     0.08     3.31  1939830  83482716
dm-0       0.42     0.07     3.30  1872538  83282120
dm-1       0.00     0.00     0.00   39840   124112
dm-2       0.00     0.00     0.00    2002   76424
dm-3       0.00     0.01     0.00   254810   14320
#从结果看到平均传输次数0.14,每秒读取0.08M,每秒写3.31M

磁盘性能统计

[root@localhost ~]# iostat -x -k 1 1
Linux 2.6.32-573.el6.x86_64 (localhost)     06/30/2017   _x86_64_    (4 CPU)
avg-cpu: %user  %nice %system %iowait %steal  %idle
      0.02  0.00  0.00  0.00  0.00  99.98
Device:     rrqm/s  wrqm/s   r/s   w/s    rkB/s  wkB/s avgrq-sz avgqu-sz  await  r_await w_await svctm %util
sda        0.00   0.27     0.00  0.14   0.04   1.65  23.78    0.00     0.31  1.51      0.29  0.16  0.00

以上所述是小编给大家介绍的详解Linux命令iostat,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 基于ios逆向过程中lldb调试技巧(推荐)

    假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在使用老一点版本的xcode的话,你又GDB调试器.他们有一些基本的相同的命令,因此假如你的xcode使用的是"(gdb)"提示,而不是"(lldb)"提示的话,你也能够更随一起做,而没有问题. "po"命令是"print object&qu

  • Vue axios 中提交表单数据(含上传文件)

    我们经常使用表单来上传数据,以及上传文件,那么怎么在表单提交成功的时候接受服务器的响应,并作出相应操作. 当然使用一般jQuery上传对象的格式也是可以的,如果使用传统的表单上传呢? <!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="UTF-8"> <meta name="viewport

  • ios 贝塞尔曲线切割圆角的方法

    ios 系统框架已经给我们提供了相应的切割圆角的方法, 但是如果在一个见面有很多控件切割的话会出现卡顿和个别不切得现在 /* 创建一个Button */ UIButton * button = [UIButton buttonWithType:(UIButtonTypeSystem)]; [button setFrame:CGRectMake(100, 100, 100, 100)]; [self addSubview:button]; /* 正厂的圆角需求处理方法 */ button.laye

  • IOS使用NSUserDefault去实现界面传值和数据存储

    IOS使用NSUserDefault去实现界面传值和数据存储 系统单例NSUserDefault的传值 第一界面中 SecondViewController *secondvc = [SecondViewController new]; //创建系统单例 NSUserDefaults的实例对象 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; //存值 [defaults setObject:_firsttextf

  • iOS11 WKWebView内容过滤规则详解

    WKWebView中新增了一个功能,可以对WebView的内容添加一些自定义的过滤规则.这个功能原来在 Safari Extension 中被引入,从 11 开始同样适用于WKWebView. 使用方法 原理上就是提供一个 JSON 给 WebKit,这个 JSON 包括内容的触发规则(trigger)和对应的处理方式(action).比如: [{ "trigger": { "url-filter": ".*" }, "action&q

  • 详解在Vue中如何使用axios跨域访问数据

    最近在项目中需要用到axios,所以就恶补一下这个axios到底是什么东东.越来它是vue-resource的替代品,官网也说了,以后都用axios, vue-resource不在维护.那么这个axios怎么用呢,上网搜索了一大堆,基本上都是雷同,我也不知道那些作者有没有在本地测试过.至少我按照网上的做法,总不能成功.经过几天的奋斗,我终于把它搞清楚了,为了不让其他的小伙伴们走弯路,我把我在实际操作中的例子分享给大家,希望对大家有用. 一.安装axios 老规矩,要想使用axios,我们得安装它

  • VUE axios发送跨域请求需要注意的问题

    在实际项目中前端使用到vue,后端使用php进行开发.前端使用axios请求请求 关于跨域 跨域的概念这些就不说了,百度一大堆相关的资料信息.我就只在这里记录下我在使用当中遇到的问题,以纪念在逝去的几个小时中资料查找的艰辛. 不多说,直接上代码~~~~ 同理,跨域的解决方案为cros.服务器 PHP端代码如下(laravel 中间件进行处理): public function handle($request, Closure $next) { if ($request->isMethod('OP

  • 详解Linux命令iostat

    Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.在一个以前看到系统监控工具,总在想那些监控工具的代理,如何收集系统性能信息,io性能,cpu使用,带宽使用等信息,偶然发现,不同系统均提供有性能分析工具的,代理可通过这些命令获取系统性能信息,个人猜测,不知道具体是不是这样的.其中iostat可以给我们提供丰富的IO状态数据,下边就来看一下iostat如何使用,命令能够输出那些信息. 简述 Linux系统中通过iostat我们能查看

  • 详解Linux命令中的正则表达式

    命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式.正则表达式是一套由多个元字符组成的模糊查找模式,使用正则表达式可以快速查找和定位文本中指定的内容. 1.单字符匹配符.  正则表达式主要由一些元字符和匹配模式组成 单字符匹配符可以匹配任意单个字符,这个字符的功能和文件名匹配符中的?功能相同 使用正则表达式查找文本,首先需要使用元字符组成一个查找模式 (1)使用查找模式时,通常将其放入两个斜杠//中,然后再放入命令,例如要在一个文本中查找匹配模式/.i...

  • 详解Linux命令与文件查找

    一.执行文件名查找 which(查找'执行文件')  //根据PATH环境变量所规范的路径查询 which [-a] command         //其中参数-a是指列出找到所有命令,而非只显示找到的第一个 例如:which ifconfig 二.文件名的查找 1.whereis(寻找特定文件) whereis [-bmsu] filename/directoryname -b :只找二进制的文件 -m :只找在说明文件manual路径下的文件 -s :只找source源文件 -u :查找不

  • 详解Linux命令行快捷键

    Ctrl+a:光标移到行首. Ctrl+e:光标移到行尾. Ctrl+l:清除终端.该快捷操作与在命令行键入clear作用相同. Ctrl+d:删除光标后一个字符: Ctrl+u:清除当前行.假如在命令行下工作,使用这一快捷操作可以清除从光标处到行首的字符. Ctrl+Alt+功能键之一会显示一个新屏幕.根据默认设置,从F1到F6是Shell提示屏幕. Ctrl+K:删除从光标到行末所有字符. 向上和向下箭头:显示命令历史. bash保存着以前键入过的命令的列表,这一列表被称为命令历史表. Ta

  • 详解Linux命令修改文件的三个时间

    Linux命令如何修改文件的三个时间 本文主要对stat和touch两个命令进行讲解. 如何查看一个文件的元数据呢?可以使用stat命令. File: 'ceshi1'  文件所在路径 Size: 4096       Blocks: 8 文件占据的磁盘块          IO Block: 4096   directory 文件类型 Device: 801h/2049d  文件所在的设备名 Inode: 378  文件索引节点号        Links: 4 被硬链接的次数 Access:

  • 详解linux命令useradd添加用户

    在 Linux 中 useradd 是个很基本的命令,但是使用起来却很不直观.以至于在 Ubuntu 中居然添加了一个 adduser 命令来简化添加用户的操作.本文主要给大家介绍linux命令useradd添加用户的知识. 1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e e

  • 详解linux命令查看服务器上的实时日志

    目录 背景 查看实时日志 背景 在项目开发过程中,在调试的阶段,往往需要debug或者进行查看日志.但日志一般隐藏得比较深,不容易直接找到,常用命令可能有如下: # 查看当前路径下,所有日志文件包含"xxx"的文件中所在行 grep "xxx" *.log.* --col # 查看开头 head xxx.log # 查看结尾 tail xxx.log # 查看全部 cat xxx.log 但是,这样输出日志,往往都是调试之后,在重新查找输出的记录,这样虽然也能排查,

  • linux 详解useradd 命令基本用法

    linux 详解useradd 命令基本用法 概要: 在 Linux 中 useradd 是个很基本的命令,但是使用起来却很不直观.以至于在 Ubuntu 中居然添加了一个 adduser 命令来简化添加用户的操作.本文主要描述笔者在学习使用 useradd 命令时的一些测试结果. 说明:本文中的所有试验都是在 Ubuntu14.04 上完成. 功能 在Linux中 useradd 命令用来创建或更新用户信息. useradd 命令属于比较难用的命令 (low level utility for

  • 详解Linux上svn命令行批量操作

    详解Linux上svn命令行批量操作 虽然说git很好,大多数时候我也是使用git,但是有时候因为一些原因,不得不使用svn,而在linux上使用svn是没有像windows上的tortoisesvn的软件的(网上有说有类似的,但是折腾了很久仍然没有成功),所以直接来命令行吧. 我们直接安装svn就好,然后文件修改之后使用命令 svn status 查看文件的跟踪信息,这里会使用一些代号,对应的大概是 " " 无修改 "A" 新增 "C" 冲突

  • 详解Linux文本文件与WIN文本文件换行格式转换命令

    详解Linux文本文件与WIN文本文件换行格式转换命令 前言: 有 时在WIN下编辑好的脚本文件上传到LINUX服务器中不能正常执行,开始误认为是LINUX配置问题,后来发现,是WIN与LINUX存储文件时的换行 符标志不同造成的.在DOS使用的换行符为 ^M$,我们称为CR与LF两个符号.而在Linux中,则仅有LF ($) 这个换行符. 可以用如下命令完成格式转换:$dos2unix,$unix2dos.但这两个命令在UBUNTU发行版本中不存在,可通过: $sudo apt-get ins

随机推荐