Linux 安装使用 iostat 命令
iostat 介绍
iostat 命令 被用于监视系统输入输出设备和 CPU 的使用情况。
它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU 使用情况。
同 vmstat 一样,iostat 也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
安装 iostat
centos 安装:
yum install sysstat
Debian 安装:
apt-get install sysstat
包下载:
- Debian 8:https://packages.debian.org/jessie/sysstat
- Debian 9:https://packages.debian.org/stretch/sysstat
- Debian 10:https://packages.debian.org/buster/sysstat
使用 iostat
选项
- -c:仅显示 CPU 使用情况;
- -d:仅显示设备利用率;
- -k:显示状态以千字节每秒为单位,而不使用块每秒;
- -m:显示状态以兆字节每秒为单位;
- -p:仅显示块设备和所有被使用的其他分区的状态;
- -t:显示每个报告产生时的时间;
- -V:显示版号并退出;
- -x:显示扩展状态。
参数:
- 间隔时间:每次报告的间隔时间(秒);
- 次数:显示报告的次数。
使用示例
-d 参数
参数 -d 表示,显示设备(磁盘)使用状态。
$ iostat -d 10
Linux 4.9.0-8-amd64 (mant) 2020年12月16日 _x86_64_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.55 16.98 28.18 8690027 14417430
sdb 10.62 21.86 192.73 11187053 98614636
输出信息的含义:
- tps:该设备每秒的传输次数。"一次传输" 意思是 "一次 I/O 请求"。多个逻辑请求可能会被合并为 "一次 I/O 请求"。"一次传输" 请求的大小是未知的。
- kB_read/s:每秒从设备读取的数据量;
- kB_wrtn/s:每秒向设备写入的数据量;
- kB_read:读取的总数据量;
- kB_wrtn:写入的总数量数据量。
这些单位都为 Kilobytes。
-c 参数
-c 参数显示 CPU 使用情况:
$ iostat -c
Linux 4.9.0-8-amd64 (mant) 2020年12月16日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
58.94 0.00 2.70 1.26 0.00 37.10
输出信息的含义:
- % user:CPU 处在用户模式下的时间百分比。
- % nice:CPU 处在带 NICE 值的用户模式下的时间百分比。
- % system:CPU 处在系统模式下的时间百分比。
- % iowait:CPU 等待输入输出完成时间的百分比。
- % steal:管理程序维护另一个虚拟处理器时,虚拟 CPU 的无意识等待时间百分比。
- % idle:CPU 空闲时间百分比。
备注:如果 % iowait 的值过高,表示硬盘存在 I/O 瓶颈,% idle 值高,表示 CPU 较空闲,如果 % idle 值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。% idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。
-x 参数
每隔三秒查看一次完整信息:
$ iostat -x 3
Linux 4.9.0-8-amd64 (mant) 2020年12月16日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
58.88 0.00 2.71 1.26 0.00 37.16
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 1.48 5.77 1.07 0.47 17.03 28.25 58.50 0.00 1.86 0.99 3.83 0.92 0.14
sdb 0.08 15.77 0.68 9.95 21.93 193.02 40.43 0.27 25.60 36.17 24.88 6.47 6.88
输出信息的含义:
- rrqm/s:每秒这个设备相关的读取请求有多少被 Merge 了(当系统调用需要读取数据的时候,VFS 将请求发到各个 FS,如果 FS 发现不同的读取请求读取的是相同 Block 的数据,FS 会将这个请求合并 Merge);
- wrqm/s:每秒这个设备相关的写入请求有多少被 Merge 了。
- r/s:每秒读取的扇区数;
- w/s:每秒写入的扇区数。
- rKB/s:每秒发送到设备的读取请求数。
- wKB/s:每秒向设备发出的写请求数。
- avgrq-sz 平均请求扇区的大小
- avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
- await: 每一个 IO 请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为 IO 的响应时间,一般地系统 IO 响应时间应该低于 5ms,如果大于 10ms 就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await 大于 svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
- svctm 表示平均每次设备 I/O 操作的服务时间(以毫秒为单位)。如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长, 系统上运行的应用程序将变慢。
- % util: 在统计时间内所有处理 IO 时间,除以总共统计时间。例如,如果统计间隔 1 秒,该设备有 0.8 秒在处理 IO,而 0.2 秒闲置,那么该设备的 % util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是 100% 表示设备已经接近满负荷运行了(当然如果是多磁盘,即使 % util 是 100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
相关文章