iostat
iostat 主要用于监控系统设备的IO负载情况,iostat首次运行时系统启动开始的各项统计信息,之后运行iostat将会显示自上次运行该命令以后的统计信息。用于通过指定统计的次数和时间来获取所需的统计信息。
命令模式
1 | iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ] | ALL ] [ -p [ device | ALL ] ] [ interval [ count ] ] |
参数说明
1 | -c 仅显示CPU统计信息.与-d选项互斥. |
入门
1 | iostat -d -k 2 10 |
参数说明
- -d 表示设备(磁盘)使用状态;
- -k 某些使用block为单位的列强制使用Kilobytes为单位
- 2[interval] 表示每隔2秒刷新一次
- 10[count] 表示总共输出10次
- -x 用于显示和io相关的扩展数据
- -c 用来获取cpu部分状态值
输出信息的意义
- tps 该设备每秒传输的次数。“一次传输”意思是“一次IO请求”。多个逻辑请求可能会被合并为”一次IO请求”。“一次传输”请求的大小是未知的。
- kB_read/s 每秒从设备读取的数据量
- kB_wrtn/s 每秒想设备写入的数据量
- kB_read 读取的总数据量
- kB_wrtn 写入总数据量
-x 输出信息的含义
- rrqm/s 每秒这个设备相同的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS就会将这个请求合并Merge)
- wrqm/s 每秒这个设备相关的写入请求有多少被Merge了
- rsec/s 每秒读取的扇区数
- wsec/s 每秒写入的扇区数
- rKB/s the number of read requests that were issued to device per second
- wKB/s the number of write requests that were issued to device per second
- avgrq-sz 请求扇区大小
- avgqu-sz 是平均请求队列的长度。好无疑问,队列长度越短越好
- await 每个IO请求的处理的平均时间(单位是毫秒)。这个可以理解为IO的相应时间,一般地系统IO时间应该低于5ms,如果大于10ms就比较大了。这个时间包括队列时间和服务时间,也就是说一般情况下 await大于svctm,他们的差值越小说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
- svctm 表示平均每次设备IO操作的服务器时间(以毫秒为单位)。如果 svctm的值和await很接近,表示几乎没有IO等待,磁盘性能很好,如果await的值远高于svctm的值,则表示IO队列等待太长,系统运行的应用程序将会变慢。
- %util 在统计时间内所有IO时间,除以总共统计时间。例如统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%, 所以该参数暗示了设备的繁忙程度。一般地,如果该参数的100%表示该设备已经接近满负荷运行了。(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)
常见用法
iostat -x 1 20
iostat -d -k 1 10 查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2 查看TPShe吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10 查看设备使用率(%util),响应时间(await)
iostat -c 1 10 查看cpu状态
实例分析
1 | ostat -d -k 1 |grep sda10 |
磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB。
1 | iostat -d -x -k 1 |
磁盘的平均相应时间 < 5ms ,磁盘使用率>80。磁盘相应正常,但是比较繁忙。