一、iostat安装与用法介绍
主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。
用户可以通过指定统计的次数和时间来获得所需的统计信息。
1、安装(RedHat系列)
查看系统是否安装这个命令
#which iostat ##显示如下,表示系统已经安装了 /usr/bin/iostat 如果没有安装,则安装 #yum install sysstat -y
2、语法
iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ] -d 表示显示设备(磁盘)使用状态 -x 表示显示和io相关的扩展数据 -k 表示某些使用block为单位的列强制使用Kilobytes为单位
用法1:
#iostat -x -k Linux 2.6.18-308.el5 (Ser108) 10/31/2014 avg-cpu: %user %nice %system %iowait %steal %idle 0.01 0.00 0.00 0.04 0.00 99.95 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.97 0.01 0.58 0.20 6.29 21.98 0.02 28.71 6.81 0.40 sda1 0.00 0.00 0.00 0.00 0.00 0.00 14.83 0.00 8.87 7.90 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 35.35 0.00 5.23 4.60 0.00 sda3 0.00 0.97 0.01 0.58 0.20 6.29 21.98 0.02 28.71 6.81 0.40
注:如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负载,该磁盘可能存在瓶颈。
用法2:
#iostat -d -k 2 --其中2表示数据显示每隔2秒刷新一次 输出如下: Linux 2.6.18-308.el5 (Ser108) 11/05/2014 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.82 0.18 8.47 857070 39382031 sda1 0.00 0.00 0.00 869 59 sda2 0.00 0.00 0.00 760 0 sda3 0.82 0.18 8.47 855221 39381972 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 10.45 0.00 121.39 0 244 sda1 0.00 0.00 0.00 0 0 sda2 0.00 0.00 0.00 0 0 sda3 10.45 0.00 121.39 0 244
输出信息解释:
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.) "一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。 kB_read/s:每秒从设备(drive expressed)读取的数据量; kB_wrtn/s:每秒向设备(drive expressed)写入的数据量; kB_read:读取的总数据量; kB_wrtn:写入的总数量:这些单位都为Kilobytes,即KB
3、指定监控的设备
#iostat -d sda 2
-x 参数 该选项将用于显示和io相关的扩展数据,可以获取更详细的数据,
例如:
#iostat -d -x -k 1 4 --表示每1秒刷新一次,一共刷新4次。 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 1.29 0.01 0.81 0.18 8.47 21.18 0.03 39.95 5.98 0.49 sda1 0.00 0.00 0.00 0.00 0.00 0.00 14.73 0.00 9.71 8.75 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 35.35 0.00 5.23 4.60 0.00 sda3 0.00 1.29 0.01 0.81 0.18 8.47 21.18 0.03 39.95 5.98 0.49 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 3.00 0.00 18.00 0.00 80.00 8.89 0.88 32.56 2.72 4.90 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda3 0.00 3.00 0.00 18.00 0.00 80.00 8.89 0.88 32.56 2.72 4.90
输出信息解释:
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge); wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。 r/s: The number of read requests that were issued to the device per second 每秒发出的读取请求的数量 w/s: The number of write requests that were issued to the device per second 没面发出的写入请求的数量 rkB/s: The number of kilobytes read from the device per second 以千字节每秒从设备读取数 wkB/s: The number of kilobytes written to the device per second. 以千字节每秒从设备写入取数 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%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。 rsec/s:每秒读取的扇区数; wsec/: 每秒写入的扇区数。
-c 参数,查看cpu信息
#iostat -c 1 2 #表示每1秒刷新一次,一共刷新2次 Linux 2.6.32-431.23.3.el6.x86_64 (zookeeper1) 05/27/2016 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.92 0.00 0.27 0.32 0.00 98.49 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.00 0.00 100.00
4、常见用法:
#iostat -d -k 1 10 #查看TPS和吞吐量信息 #iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await) #iostat -c 1 10 #查看cpu状态
5、实例分析
#iostat -d -k 1 8 Linux 2.6.32-504.el6.x86_64 (kvm5) 05/27/2016 _x86_64_ (8 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 25.41 3.72 93.20 16601966 416182172 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 42.00 0.00 104.00 0 104 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 52.00 0.00 172.00 0 172 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 34.00 0.00 128.00 0 128 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 9.00 0.00 16.00 0 16 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 25.00 0.00 72.00 0 72 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 31.00 0.00 80.00 0 80 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 24.00 0.00 92.00 0 92 以上可以看到,磁盘每秒传输次数平均约30,每秒磁盘读取较少,写入较多,约为100kB #iostat -d -k -x 1 5 Linux 2.6.32-504.el6.x86_64 (kvm5) 05/27/2016 _x86_64_ (8 CPU) 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 1.27 0.11 25.30 3.72 93.20 7.63 0.03 1.04 35.76 0.89 0.71 1.81 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.00 0.00 32.00 0.00 132.00 8.25 0.12 3.84 0.00 3.84 1.75 5.60 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.00 0.00 58.00 0.00 420.00 14.48 0.03 0.60 0.00 0.60 0.59 3.40 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.00 0.00 27.00 0.00 76.00 5.63 0.01 0.37 0.00 0.37 0.33 0.90 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.00 0.00 5.00 0.00 32.00 12.80 0.02 4.80 0.00 4.80 4.80 2.40 以上可以看到,磁盘的平均响应时间较小,为0,磁盘使用率平均为3.0左右,比较小。
二、iotop工具
1、介绍
iotop命令是专门显示硬盘IO的命令,界面风格类似top命令。这个命令只有在kernelv2.6.20及以后的版本中才有。
2、安装
#yum install iotop -y
3、实例
#iotop 显示如下,可以看到有一个进程,io占用比较多 Total DISK READ: 6.42 M/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1476 be/4 root 6.42 M/s 0.00 B/s 0.00 % 57.63 % java -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xm~2.5.4-SNAPSHOT-FERDI/lib/stax2-api-3.1.1.jar:/root/dubbo-monitor-simple-2 1475 be/4 root 0.00 B/s 92.21 K/s 0.00 % 0.00 % java -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xm~2.5.4-SNAPSHOT-FERDI/lib/stax2-api-3.1.1.jar:/root/dubbo-monitor-simple-2 1455 be/4 root 0.00 B/s 7.68 K/s 0.00 % 0.00 % java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/~per.server.quorum.QuorumPeerMain /usr/local/zookeeper/bin/../conf/zoo.cfg 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [stopper/0] 6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] 7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1] 8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [stopper/1] 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1] 10 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1] 11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/0] 12 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/1] 13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [cgroup] 14 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khelper] 15 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [netns] 16 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [async/mgr] 17 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [pm] 18 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [sync_supers] 19 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [bdi-default] 20 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kintegrityd/0] 21 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kintegrityd/1]
2、参数
Options: --version show program's version number and exit -h, --help show this help message and exit -o, --only only show processes or threads actually doing I/O -b, --batch non-interactive mode -n NUM, --iter=NUM number of iterations before ending [infinite] -d SEC, --delay=SEC delay between iterations [1 second] -p PID, --pid=PID processes/threads to monitor [all] -u USER, --user=USER users to monitor [all] -P, --processes only show processes, not all threads -a, --accumulated show accumulated I/O instead of bandwidth -k, --kilobytes use kilobytes instead of a human friendly unit -t, --time add a timestamp on each line (implies --batch) -q, --quiet suppress some lines of header (implies --batch)
二、vmstat 工具
vmstat是一个即时显示内存使用情况的工具,一般系统自带的都有
vmstat 使用方法:
vmstat [-V] [-n] [delay [count]] -V 显示vmstat的版本; -n causes the headers not to be reprinted regularly. -a 显示所有激活和未激活内存的状态;print inactive/active page stats. -d 显示硬盘统计信息;prints disk statistics -D 显示硬盘分区表;prints disk table -p 显示硬盘分区读写状态等;prints disk partition statistics -s 显示内存使用情况;prints vm table -m prints slabinfo -S 定义单位,k K delay 是两次刷新时间间隔; 单位体积: k:1000 K:1024 m:1000000 M:1048576 (默认是 K) count 刷新次数;
一个实例:
#vmstat 3 5 ##表示每3秒更新一次输出信息,连续统计5次结束。 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 5 1 0 82471648 149068 7528352 0 0 0 12 0 1 16 18 66 0 0 3 0 0 82471760 149068 7528352 0 0 0 72 79652 150274 17 20 63 0 0 3 0 0 82471936 149068 7528352 0 0 0 64 79561 150275 16 20 64 0 0 5 0 0 82471936 149068 7528352 0 0 0 88 79784 150146 17 20 62 0 0
解释:
r :The number of processes waiting for run time. 等待运行时间的进程数,即等待的进程数、 b :The number of processes in uninterruptible sleep. 在等待io的进程数 swpd: 虚拟内存的使用量 free:空闲内存量 buff:缓冲区中的内存 cache:被用来做为高速缓存的内存数 si: 从磁盘交换到内存的交换页数量,单位:KB/秒。 so: 从内存交换到磁盘的交换页数量,单位:KB/秒。 bi: 发送到块设备的块数,单位:块/秒。 bo: 从块设备接收到的块数,单位:块/秒。 in: 每秒的中断数,包括时钟中断。 cs: 每秒的环境(上下文)转换次数。 us:用户进程使用的时间 。以百分比表示。 sy:系统进程使用的时间。 以百分比表示。 id:中央处理器的空闲时间 。以百分比表示。 wa:io等待时间 st:Time stolen from a virtual machine