Linux之iostat命令
简介
iostat
是一个系统监视工具,用于收集并报告系统的输入/输出(I/O)
统计信息。通过iostat,用户可以了解系统上磁盘、CPU
和网络等方面的性能状况,以及应用程序和进程对系统资源的使用情况。iostat
是Linux
、Unix
和Mac OS X
等操作系统中的常用工具之一,它可以帮助用户对系统进行性能分析和优化。
Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。iostat属于sysstat软件包。可以用yum install sysstat 直接安装。
iostat命令格式
1 | iostat [选项] [时间间隔] [次数] |
其中,选项和时间间隔是可选的,次数默认为1。常用的选项包括:
选项 | 含义 |
---|---|
-C | 显示CPU使用情况 |
-d | 显示磁盘使用情况 |
-k | 以KB为单位显示输出结果 |
-m | 以MB为单位显示输出结果 |
-N | 显示磁盘阵列(LVM)信息 |
-n | 显示NFS使用情况 |
-p [磁盘] | 显示磁盘和分区的情况 |
-t | 显示终端和CPU的信息 |
-x | 显示详细信息 |
-V | 显示版本信息 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | [root@raclhr-21c-n1 ~]# man iostat IOSTAT(1) Linux User Manual IOSTAT(1) NAME iostat - Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions. SYNOPSIS iostat [ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ -j { ID | LABEL | PATH | UUID | ... } ] [ [ -T ] -g group_name ] [ -p [ device [,...] | ALL ] ] [ device [...] | ALL ] [ interval [ count ] ] DESCRIPTION The iostat command is used for monitoring system input/output device loading by observing the time the devices are active in relation to their average transfer rates. The iostat command generates reports that can be used to change system configuration to better balance the input/output load between physical disks. The first report generated by the iostat command provides statistics concerning the time since the system was booted, unless the -y option is used (in this case, this first report is omitted). Each subsequent report covers the time since the previous report. All statistics are reported each time the iostat command is run. The report consists of a CPU header row followed by a row of CPU statistics. On multiprocessor systems, CPU statistics are calculated system-wide as averages among all processors. A device header row is displayed followed by a line of statistics for each device that is configured. The interval parameter specifies the amount of time in seconds between each report. The first report contains statistics for the time since system startup (boot), unless the -y option is used (in this case, this report is omitted). Each subsequent report contains statistics collected during the interval since the previous report. The count parameter can be specified in conjunction with the interval parameter. If the count parameter is specified, the value of count determines the number of reports generated at interval seconds apart. If the interval parameter is specified without the count parameter, the iostat command generates reports continuously. REPORTS The iostat command generates two types of reports, the CPU Utilization report and the Device Utilization report. CPU Utilization Report The first report generated by the iostat command is the CPU Utilization Report. For multiprocessor systems, the CPU values are global averages among all processors. The report has the following format: %user Show the percentage of CPU utilization that occurred while executing at the user level (application). %nice Show the percentage of CPU utilization that occurred while executing at the user level with nice priority. %system Show the percentage of CPU utilization that occurred while executing at the system level (kernel). %iowait Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request. %steal Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor. %idle Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request. Device Utilization Report The second report generated by the iostat command is the Device Utilization Report. The device report provides statistics on a per physical device or partition basis. Block devices and partitions for which statistics are to be displayed may be entered on the command line. If no device nor partition is entered, then statistics are displayed for every device used by the system, and providing that the kernel maintains statistics for it. If the ALL keyword is given on the command line, then statistics are displayed for every device defined by the system, including those that have never been used. Transfer rates are shown in 1K blocks by default, unless the environment variable POSIXLY_CORRECT is set, in which case 512-byte blocks are used. The report may show the following fields, depending on the flags used: Device: This column gives the device (or partition) name as listed in the /dev directory. tps Indicate the number of transfers per second that were issued to the device. A transfer is an I/O request to the device. Multiple logical requests can be combined into a single I/O request to the device. A transfer is of indeterminate size. Blk_read/s (kB_read/s, MB_read/s) Indicate the amount of data read from the device expressed in a number of blocks (kilobytes, megabytes) per second. Blocks are equivalent to sectors and therefore have a size of 512 bytes. Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s) Indicate the amount of data written to the device expressed in a number of blocks (kilobytes, megabytes) per second. Blk_read (kB_read, MB_read) The total number of blocks (kilobytes, megabytes) read. Blk_wrtn (kB_wrtn, MB_wrtn) The total number of blocks (kilobytes, megabytes) written. rrqm/s The number of read requests merged per second that were queued to the device. wrqm/s The number of write requests merged per second that were queued to the device. r/s The number (after merges) of read requests completed per second for the device. w/s The number (after merges) of write requests completed per second for the device. rsec/s (rkB/s, rMB/s) The number of sectors (kilobytes, megabytes) read from the device per second. wsec/s (wkB/s, wMB/s) The number of sectors (kilobytes, megabytes) written to the device per second. avgrq-sz The average size (in sectors) of the requests that were issued to the device. avgqu-sz The average queue length of the requests that were issued to the device. await The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them. r_await The average time (in milliseconds) for read requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them. w_await The average time (in milliseconds) for write requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them. svctm The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more. This field will be removed in a future sysstat version. %util Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%. OPTIONS -c Display the CPU utilization report. -d Display the device utilization report. -g group_name { device [...] | ALL } Display statistics for a group of devices. The iostat command reports statistics for each individual device in the list then a line of global statistics for the group displayed as group_name and made up of all the devices in the list. The ALL keyword means that all the block devices defined by the system shall be included in the group. -h Make the Device Utilization Report easier to read by a human. -j { ID | LABEL | PATH | UUID | ... } [ device [...] | ALL ] Display persistent device names. Options ID, LABEL, etc. specify the type of the persistent name. These options are not limited, only prerequisite is that directory with required persistent names is present in /dev/disk. Optionally, multiple devices can be specified in the chosen persistent name type. Because persistent device names are usually long, option -h is enabled implicitly with this option. -k Display statistics in kilobytes per second. -m Display statistics in megabytes per second. -N Display the registered device mapper names for any device mapper devices. Useful for viewing LVM2 statistics. -p [ { device [,...] | ALL } ] The -p option displays statistics for block devices and all their partitions that are used by the system. If a device name is entered on the command line, then statistics for it and all its partitions are displayed. Last, the ALL keyword indicates that statistics have to be displayed for all the block devices and partitions defined by the system, including those that have never been used. If option -j is defined before this option, devices entered on the command line can be specified with the chosen persistent name type. -T This option must be used with option -g and indicates that only global statistics for the group are to be displayed, and not statistics for individual devices in the group. -t Print the time for each report displayed. The timestamp format may depend on the value of the S_TIME_FORMAT environment variable (see below). -V Print version number then exit. -x Display extended statistics. -y Omit first report with statistics since system boot, if displaying multiple records at given interval. -z Tell iostat to omit output for any devices for which there was no activity during the sample period. ENVIRONMENT The iostat command takes into account the following environment variables: S_TIME_FORMAT If this variable exists and its value is ISO then the current locale will be ignored when printing the date in the report header. The iostat command will use the ISO 8601 format (YYYY-MM-DD) instead. The timestamp displayed with option -t will also be compliant with ISO 8601 format. POSIXLY_CORRECT When this variable is set, transfer rates are shown in 512-byte blocks instead of the default 1K blocks. EXAMPLES iostat Display a single history since boot report for all CPU and Devices. iostat -d 2 Display a continuous device report at two second intervals. iostat -d 2 6 Display six reports at two second intervals for all devices. iostat -x sda sdb 2 6 Display six reports of extended statistics at two second intervals for devices sda and sdb. iostat -p sda 2 6 Display six reports at two second intervals for device sda and all its partitions (sda1, etc.) BUGS /proc filesystem must be mounted for iostat to work. Kernels older than 2.6.x are no longer supported. The average service time (svctm field) value is meaningless, as I/O statistics are now calculated at block level, and we don't know when the disk driver starts to process a request. For this reason, this field will be removed in a future sysstat version. FILES /proc/stat contains system statistics. /proc/uptime contains system uptime. /proc/diskstats contains disks statistics. /sys contains statistics for block devices. /proc/self/mountstats contains statistics for network filesystems. /dev/disk contains persistent device names. AUTHOR Sebastien Godard (sysstat <at> orange.fr) SEE ALSO sar(1), pidstat(1), mpstat(1), vmstat(8), nfsiostat(1), cifsiostat(1) http://pagesperso-orange.fr/sebastien.godard/ Linux |
iostat语法
用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]]
常用选项说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 | -C:显示CPU使用情况 -c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果 -d:单独输出Device结果,不包括cpu结果 -k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位 -x:输出更详细的io设备统计信息 interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出 -m 以 M 为单位显示 -N 显示磁盘阵列(LVM) 信息 -n 显示NFS 使用情况 -p[磁盘] 显示磁盘和分区的情况 -t 显示终端和CPU的信息 -x 显示详细信息 -V 显示版本信息 |
常用实例
iostat,结果为从系统开机到当前执行时刻的统计信息
不带参数的iostat命令将会输出CPU和每个分区的输出/输出的统计信息,如下所示。
1 2 3 4 5 6 7 8 9 10 11 | [root@tecmint ~]# iostat Linux 2.6.32-279.el6.i686 (tecmint.com) 09/03/2012 _i686_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.12 0.01 1.54 2.08 0.00 96.24 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 3.59 161.02 13.48 1086002 90882 dm-0 5.76 159.71 13.47 1077154 90864 dm-1 0.05 0.38 0.00 2576 0 |
输出含义:
cpu属性值说明:
- %user:CPU处在用户模式下的时间百分比。
- %nice:CPU处在带NICE值的用户模式下的时间百分比。
- %system:CPU处在系统模式下的时间百分比。
- %iowait:CPU等待输入输出完成时间的百分比。
- %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
- %idle:CPU空闲时间百分比。
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。重点关注iowait值,表示CPU用于等待io请求的完成时间。
disk属性值说明:
Device: 各磁盘设备的IO统计信息。各列含义如下:
1 2 3 4 5 6 | Device: 以sdX形式显示的设备名称 tps: 每秒进程下发的IO读、写请求数量 KB_read/s: 每秒从驱动器读入的数据量,单位为K。 KB_wrtn/s: 每秒从驱动器写入的数据量,单位为K。 KB_read: 读入数据总量,单位为K。 KB_wrtn: 写入数据总量,单位为K。 |
iostat -x -k -d 1 2。每隔1S输出磁盘IO的详细信息,总共采样2次
以上各列的含义如下:
1 2 3 4 5 6 7 8 9 10 11 | rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并 wrqm/s: 每秒对该设备的写请求被合并次数 r/s: 每秒完成的读次数 w/s: 每秒完成的写次数 rkB/s: 每秒读数据量(kB为单位) wkB/s: 每秒写数据量(kB为单位) avgrq-sz:平均每次IO操作的数据量(扇区数为单位) avgqu-sz: 平均等待处理的IO请求队列长度 await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位) svctm: 平均每次IO请求的处理时间(毫秒为单位) %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率 |
重点关注参数