IO队列长度监控脚本(以及iostat,tail命令详解)

 

 

一、磁盘说明

磁盘在系统中负责存储和读取任务,磁盘的处理速度直接影响到了计算机的速度。

 

二、监控目的

随时掌握IO的使用情况,防止IO瓶颈

 

三、监控指标

IO队列长度

IO ps(每秒可以读写多少次)

磁盘吞吐量

 

四、监控命令

1、iostat命令

iostat 主要用于输出磁盘IO 和 CPU的统计信息。

iostat属于sysstat软件包。可以用yum install sysstat 直接安装

(1)用法:iostat [选项] [<时间间隔>] [<次数>]

 

选项:

-c: 显示CPU使用情况
-d: 显示磁盘使用情况
-N: 显示磁盘阵列(LVM) 信息
-n: 显示NFS 使用情况
-k: 以 KB 为单位显示
-m: 以 M 为单位显示
-t: 报告每秒向终端读取和写入的字符数和CPU的信息
-V: 显示版本信息
-x: 显示详细信息
-p:[磁盘] 显示磁盘和分区的情况

 

 

[root@CentOs shell]# iostat
Linux 3.10.0-1160.59.1.el7.x86_64 (CentOs)     2022年04月22日     _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.03    0.00    0.05    0.00    0.00   99.92

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.39         7.11         4.14     305295     177914
dm-0              0.40         6.35         4.09     272947     175825
dm-1              0.00         0.05         0.00       2204          0

[root@CentOs shell]#

 

(2)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。

 

disk属性值说明:

磁盘名称
device:磁盘名称
tps:每秒钟发送到的I/O请求数.
kB_read/s:每秒从驱动器(磁盘)读入的数据量,单位是K
kB_wrtn/s:每秒从驱动器(磁盘)写入的数据量,单位是K
kB_read:读入的数据总量.
kB_wrtn:写入的数据总量.

 

 

[root@CentOs shell]# iostat -x
Linux 3.10.0-1160.59.1.el7.x86_64 (CentOs)     2022年04月22日     _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.03    0.00    0.05    0.00    0.00   99.92

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     0.02    0.22    0.17     7.12     4.15    57.35     0.00    0.87    0.81    0.94   0.38   0.02
dm-0              0.00     0.00    0.20    0.20     6.37     4.10    52.37     0.00    0.91    0.85    0.97   0.37   0.01
dm-1              0.00     0.00    0.00    0.00     0.05     0.00    50.09     0.00    0.17    0.17    0.00   0.09   0.00


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时间的百分比.用于显示设备的带宽利用率.
当这个值接近100%时,表示设备带宽已经占满.

2、iozone命令

 

 

五、脚本应用场景:

磁盘使用率监控一般周期为小时、天,不会太频繁。

监控平台+监控脚本

计划任务+监控脚本

手动监控

六、解决问题

及时掌握磁盘容量,防止100%造成磁盘无法读取。

 

 

七、监控命令

 

[root@CentOs shell]# cat io_status.sh
#!/bin/bash

#磁盘io监控 明确知晓HD的使用情况
#监控指标 IO队列长度 IOPS 吞吐量

#监控命令: iostat    iozone


#iostat命令

io(){
  device_num=`iostat -x |egrep "^sd[a-z]"|wc -l`
  iostat -x 1 3|egrep "^sd[a-z]"|tail -n +$((device_num))|awk '{io_long[$1]+=$9}END{for (i in io_long)print io_long[i],i}'

}


#阈值如何判断   2-3已经很大了(我们一般是不会写循环的,此处是为了实验需要!)
while true
do
    io
    sleep 5
done
[root@CentOs shell]#

我们一般可以做个测试,重新开启一个终端,运行这个命令:dd if=/dev/zero of=/tmp/bigfile bs=1M count=3000

 

[root@CentOs shell]# dd if=/dev/zero of=/tmp/bigfile bs=1M count=3000
记录了3000+0 的读入
记录了3000+0 的写出
3145728000字节(3.1 GB)已复制,12.5831 秒,250 MB/秒
[root@CentOs shell]# rm -rf /tmp/bigfile
[root@CentOs shell]#

 

 

 

我们发现,刚开始还不明显,新开终端运行了命令之后数值就上量了!

 

 

 

 

附:

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

命令格式:tail [参数] [文件]

参数:

  • -f 循环读取
  • -q 不显示处理信息
  • -v 显示详细的处理信息
  • -c<数目> 显示的字节数
  • -n<行数> 显示文件的尾部 n 行内容
  • --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
  • -q, --quiet, --silent 从不输出给出文件名的首部
  • -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

实例

要显示 notes.log 文件的最后 10 行,请输入以下命令:

tail notes.log         # 默认显示最后 10 行

要跟踪名为 notes.log 的文件的增长情况,请输入以下命令:

tail -f notes.log

此命令显示 notes.log 文件的最后 10 行。当将某些行添加至 notes.log 文件时,tail 命令会继续显示这些行。 显示一直继续,直到您按下(Ctrl-C)组合键停止显示。

显示文件 notes.log 的内容,从第 20 行至文件末尾:

tail -n +20 notes.log

显示文件 notes.log 的最后 10 个字符:

tail -c 10 notes.log

 

posted @ 2022-04-22 23:25  屯子里唯一的架构师  阅读(563)  评论(0编辑  收藏  举报