参考:https://zhuanlan.zhihu.com/p/649946956
安装
#默认已安装 yum install sysstat -y
选项参数
iostat <options> <device name>
-c | 显示CPU使用情况 |
-d | 显示磁盘使用情况 |
--dec={ 0 | 1 | 2 } | 指定要使用的小数位数,默认为 2 |
-g GROUP_NAME { DEVICE [...] | ALL | 显示一组设备的统计信息 |
-H | 此选项必须与选项 -g 一起使用,指示只显示组的全局统计信息,而不显示组中单个设备的统计信息 |
-h | 以可读格式打印大小 |
-j { ID | LABEL | PATH | UUID | ... } [ DEVICE [...] | ALL ] | 显示永久设备名。选项 ID、LABEL 等用于指定持久名称的类型 |
-k | 以 KB 为单位显示 |
-m | 以 MB 为单位显示 |
-N | 显示磁盘阵列(LVM) 信息 |
-n | 显示NFS 使用情况 |
-p [ { DEVICE [,...] | ALL } ] | 显示磁盘和分区的情况 |
-t | 打印时间戳。时间戳格式可能取决于 S_TIME_FORMAT 环境变量 |
-V | 显示版本信息并退出 |
-x | 显示详细信息(显示一些扩展列的数据) |
-y | 如果在给定的时间间隔内显示多个记录,则忽略自系统启动以来的第一个统计信息 |
-z | 省略在采样期间没有活动的任何设备的输出 |
常用命令
iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB),每1s收集1次数据,共收集10次 iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB),每2s收集1次数据 iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)等详细数据, 每1s收集1次数据,总共收集10次 iostat -c 1 10 #查看cpu状态,每1s收集1次数据,总共收集10次
输出内容解析
[root@localhost ~]# iostat Linux 3.10.0-957.27.2.el7.x86_64 (localhost) 11/22/2023 _x86_64_ (64 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.26 0.00 0.00 0.00 0.00 99.74 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 92.77 50.93 5838.33 805661841 92351602575 dm-0 0.00 0.00 0.00 11401 528 dm-1 0.01 0.01 0.02 80713 377904 dm-2 1.32 0.01 52.66 119313 832956992 dm-3 10.88 108.36 197.10 1713991108 3117706164
第一行:内核版本号,主机名,当前的日期,cpu的架构,当前系统的cpu核数
cpu部分(仅根据 %iowait 不能判断出IO存在瓶颈,需结合其他指标查看):
- %user:CPU处在用户模式下的时间百分比
- %nice:CPU处在带NICE值的用户模式下的时间百分比
- %system:CPU处在系统模式下的时间百分比
- %iowait:CPU等待输入输出完成时间的百分比
- %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
- %idle:CPU空闲时间百分比
第三部分:
- Device:/dev 目录下的磁盘(或分区)名称。(本文中的dm-x是容器的分区,sda是宿主机的io)
- tps:该设备每秒的传输次数。一次传输即一次 I/O 请求,多个逻辑请求可能会被合并为一次 I/O 请求。一次传输请求的大小是未知的
- kB_read/s:每秒从磁盘读取数据大小,单位KB/s
- kB_wrtn/s:每秒写入磁盘的数据的大小,单位KB/s
- kB_dscd/s: 每秒磁盘的丢块数,单数KB/s
- kB_read:从磁盘读出的数据总数,单位KB
- kB_wrtn:写入磁盘的的数据总数,单位KB
- kB_dscd: 磁盘总的丢块数量
需要注意的是,如果使用iostat -dk 2
这样的命令,每2s收集一次数据,则kB_wrtn的含义是2s内写入磁盘的数据总数,而kB_read的含义是2s内从磁盘读出的数据总数,kB_dscd的含义则是2s内磁盘块的丢块数量。
如果没有时间间隔参数,例如iostat -dk
,则kB_wrtn的含义是从开机以来的写入磁盘的数据总量,kB_read的含义是从开机以来的从磁盘读出的数据总数,kB_dscd的含义则是开机以来的磁盘块的丢块数量。
-x 扩展列
[root@localhost ~]# iostat -x Linux 3.10.0-957.27.2.el7.x86_64 (localhost) 11/22/2023 _x86_64_ (64 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.26 0.00 0.00 0.00 0.00 99.74 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 7.12 1.66 91.11 50.93 5838.52 126.97 0.17 1.79 1.78 1.79 0.32 2.97 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 13.07 0.00 2.33 0.02 31.95 0.58 0.00 dm-1 0.00 0.00 0.00 0.01 0.01 0.02 10.35 0.00 24.78 7.04 26.37 14.20 0.01 dm-2 0.00 0.00 0.00 1.32 0.01 52.66 79.95 0.03 25.61 10.31 25.61 12.42 1.64 dm-3 0.00 0.00 3.58 7.30 108.35 197.09 56.14 0.15 13.78 0.60 20.24 4.52 4.92 dm-4 0.00 0.00 0.00 0.00 0.00 0.00 19.69 0.00 32.17 0.92 46.22 28.32 0.00
- rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge)
- wrqm/s:每秒这个设备相关的写入请求有多少被Merge了
- r/s:每秒向磁盘发起的读操作数
- w/s:每秒向磁盘发起的写操作数
- rkB/s:每秒读K字节数
- wkB/s:每秒写K字节数
- avgrq-sz:发送到设备的请求的平均大小,单位是扇区
- avgqu-sz:平均请求队列的长度,队列长度越短越好,观察磁盘性能的核心指标
- await:每个IO请求的处理的平均时间(以毫秒为单位)
- r_await:每个读操作平均所需的时间;不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间
- w_await:每个写操作平均所需的时间;不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间
- svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)
- %util:一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比,向设备发出I/O请求的经过时间百分比(设备的带宽利用率)。当串行服务请求的设备的该值接近100%时,将发生设备饱和。 但是对于并行处理请求的设备(例如RAID阵列和现代SSD),此数字并不反映其性能限制。这个指标高说明IO基本上就到瓶颈了,但是低也不一定IO就不是瓶颈。一般%util大于70%,I/O压力就比较大. 同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(I/O等待所占用的CPU时间的百分比,高过30%时I/O压力高)
测试案例
#向a.dat文件中写入8G的数据 dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct
从 iostat -mx 1 wMB/s可以看出,目前磁盘写入速率为1.19M之间(此为容器,磁盘为dm-12),从%util看出磁盘使用率也逐渐高达100%,但此时%iowait的值仍为0%
从 iostat -dk 1 MB_read/s也可以看出,磁盘写入速率为1.91~2.86
标签:kB,dm,0.00,iostat,磁盘,CPU From: https://www.cnblogs.com/Xinenhui/p/17850992.html