一、iostat
# iostat Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 2020年10月10日 _x86_64_ (3 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.08 0.00 0.19 0.12 0.00 99.61 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sdb 0.01 0.38 0.00 5188 0 sda 0.94 28.69 2.84 387369 38280 scd0 0.00 0.08 0.00 1028 0 dm-0 0.85 26.32 1.69 355363 22788 dm-1 0.01 0.16 0.00 2204 0
avg-cpu段:
%user: 在用户级别运行所使用的CPU的百分比. %nice: nice操作所使用的CPU的百分比. %system: 在系统级别(kernel)运行所使用CPU的百分比. %iowait: CPU等待硬件I/O时,所占用CPU百分比. %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比 %idle: CPU空闲时间的百分比.
Device段
tps: 每秒钟发送到的I/O请求数. Blk_read /s: 每秒读取的block数. Blk_wrtn/s: 每秒写入的block数. Blk_read: 读入的block总数. Blk_wrtn: 写入的block总数.
组合参数说明
Blk_read:读入块的当总数. Blk_wrtn:写入块的总数. kB_read/s:每秒从驱动器读入的数据量,单位为K. kB_wrtn/s:每秒向驱动器写入的数据量,单位为K. kB_read:读入的数据总量,单位为K. kB_wrtn:写入的数据总量,单位为K. rrqm/s:将读入请求合并后,每秒发送到设备的读入请求数. wrqm/s:将写入请求合并后,每秒发送到设备的写入请求数. r/s:每秒发送到设备的读入请求数. w/s:每秒发送到设备的写入请求数. rsec/s:每秒从设备读入的扇区数. wsec/s:每秒向设备写入的扇区数. rkB/s:每秒从设备读入的数据量,单位为K. wkB/s:每秒向设备写入的数据量,单位为K. avgrq-sz:发送到设备的请求的平均大小,单位是扇区. avgqu-sz:发送到设备的请求的平均队列长度. await:I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒. svctm:发送到设备的I/O请求的平均执行时间.单位是毫秒. %util:在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率.
iostat -d 2 6
Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 2020年10月10日 _x86_64_ (3 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 0.16 0.08 0.00 99.70 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sdb 0.00 0.00 0.01 0.00 0.27 0.00 72.06 0.00 1.64 1.64 0.00 1.13 0.00 sda 0.00 0.01 0.51 0.17 20.07 2.16 65.53 0.01 10.68 13.83 1.03 3.66 0.25 scd0 0.00 0.00 0.00 0.00 0.05 0.00 114.22 0.00 21.06 21.06 0.00 20.72 0.00 dm-0 0.00 0.00 0.45 0.18 18.41 1.36 63.48 0.01 11.41 15.56 1.01 3.95 0.25 dm-1 0.00 0.00 0.00 0.00 0.11 0.00 50.09 0.00 0.16 0.16 0.00 0.09 0.00
-
r/s, w/s, rkB/s, wkB/s:这些表示设备上每秒钟的读写次数和读写的字节数(单位是k字节)。这些可以看出设备的负载情况。性能问题可能就是简单的因为大量的文件加载请求。
-
await:I/O 等待的平均时间(单位是毫秒)。这是应用程序所等待的时间,包含了等待队列中的时间和被调度服务的时间。过大的平均等待时间就预示着设备超负荷了或者说设备有问题了。
-
avgqu-sz:设备上请求的平均数。数值大于 1 可能表示设备饱和了(虽然设备通常都是可以支持并行请求的,特别是在背后挂了多个磁盘的虚拟设备)。
-
%util:设备利用率。是使用率的百分数,展示每秒钟设备工作的时间。这个数值大于 60% 则会导致性能很低(可以在 await 中看),当然这也取决于设备特点。这个数值接近 100% 则表示设备饱和了。
每隔2秒显示一次sda及上面所有分区的统计信息,共输出6次.
iostat -p sda 2 6<br> Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 2020年10月10日 _x86_64_ (3 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 0.16 0.08 0.00 99.71 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.67 19.74 2.14 387369 41916 sda1 0.06 1.33 0.79 26138 15491 sda2 0.60 18.28 1.35 358655 26424
显示块设备的扩展信息,以k为单位,每1秒刷新一次,总刷新10次
# iostat -d -k -x 1 10 Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 2020年10月10日 _x86_64_ (3 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.6
对于以上示例输出,我们可以获取到以下信息:
每秒向磁盘上写30M左右数据(wkB/s值) 每秒有91次IO操作(r/s+w/s),其中以写操作为主体 平均每次IO请求等待处理的时间为120.57毫秒,处理耗时为6.33毫秒 等待处理的IO请求队列中,平均有11.79个请求驻留
以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:
util = (r/s+w/s) * (svctm/1000)
对于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603
指定查看sda的TPS和吞吐量信息(磁盘读写速度单位为MB),每间隔2秒刷新一次
iostat -d -m 2 |grep sda Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 0.19 0.00 0.07 230 12004 sda 368.00 0.00 184.00 0 368 sda 373.00 0.00 186.25 0 372 sda 351.00 0.00 175.50 0 351 sda 345.50 0.00 172.75 0 345 sda 362.50 0.00 181.00 0 362 sda 375.00 0.00 187.39 0 374 sda 369.00 0.00 184.36 0 368