iostat与iotop

26 篇文章 0 订阅
以下实验环境都在我自己笔记本的VirtualBox虚拟机上,如果换到了真实服务器设备,会额外提示。
1 [root@roger-lab tmp]# cat /etc/redhat-release
2 CentOS release 6.3 (Final)
3 [root@roger-lab tmp]# uname -a
4 Linux roger-lab 2.6.32-279.19.1.el6.i686 #1 SMP Wed Dec 19 04:30:58 UTC 2012 i686 i686 i386 GNU/Linux
一,iostat
Linux下最基本的IO监测工具就是iostat了,它属于sysstat这个rpm包。
1 [root@roger-lab tmp]# rpm -qf /usr/bin/iostat
2 sysstat-9.0.4-20.el6.i686
kernel代码:block/genhd.c

iostat代码:http://pagesperso-orange.fr/sebastien.godard/sysstat-10.1.3.tar.gz

kernel代码暂时读不懂,没关系,继续往下。

简单使用方法为:
01 [root@roger-lab tmp]# iostat
02 Linux 2.6.32-279.19.1.el6.i686 (roger-lab)      01/26/2013      _i686_  (1 CPU)
03  
04 avg-cpu:  %user   %nice %system %iowait  %steal   %idle
05            0.24    0.12    0.75    0.35    0.00   98.54
06  
07 Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
08 sda               1.68        46.58        65.29     462724     648514
09 dm-0              8.49        45.66        65.29     453522     648496
10 dm-1              0.03         0.24         0.00       2376          0
一般我们需要持续观察IO状况:
01 [root@roger-lab tmp]# iostat -x 1
02 Linux 2.6.32-279.19.1.el6.i686 (roger-lab)      01/26/2013      _i686_  (1 CPU)
03  
04 avg-cpu:  %user   %nice %system %iowait  %steal   %idle
05            0.36    0.18    1.10    0.50    0.00   97.86
06  
07 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
08 sda               0.56    10.05    1.29    1.26    71.16    99.61    66.75     0.11   44.78   3.12   0.80
09 dm-0              0.00     0.00    1.65   11.30    69.75    99.61    13.08     1.63  125.92   0.62   0.80
10 dm-1              0.00     0.00    0.05    0.00     0.37     0.00     8.00     0.00    2.47   1.85   0.01
11  
12 avg-cpu:  %user   %nice %system %iowait  %steal   %idle
13            0.00    0.00    0.00    0.00    0.00  100.00
14  
15 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
16 sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
17 dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
18 dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

监测NFS的统计数据 iostat -n 1 :

 

1 Device:     rBlk_nor/s   wBlk_nor/s   rBlk_dir/s   wBlk_dir/s   rBlk_svr/s   wBlk_svr/s     ops/s    rops/s    wops/s
2 1.2.1.2:/v/       0.00        76.65         0.00         0.00         0.00       314.70      4.00      0.00      4.00

 

以下是iostat输出的解释,由man帮助手册翻译过来:

 

01 1.直接执行iostat不接参数,是指系统从启动到现在为止的统计数据。
02  
03 2.间隔参数代表每次报告的间隔时间,同样第一条是系统从启动到现在为止的统计数据,后续的每条都是iostat执行间隔时间内的统计数据。
04  
05 3.iostat创建3种类型报告,cpu使用率,设备使用率,网络文件系统报告。
06  
07 4.cpu使用率报告:
08 (1).%user:用户态所占用的CPU使用率百分比(应用程序)。
09 (2).%nice:用户态执行nice优先级所占用的CPU使用率百分比。
10 (3).%system:内核态所占用的CPU使用率百分比(内核)
11 (4).%iowait:CPU处于idle状态等待磁盘IO请求所占用的百分比。
12 (5).%steal:当hypervisor服务另一个(虚拟)CPU时,(虚拟)CPU强制等待的时间占比。
13 (6).%idle:没有磁盘请求时,CPU的空闲时间占比。
14  
15 5.设备使用率报告:
16 (1).Device:监测的设备或分区名称
17 (2).tps:代表每秒的传输数(transfer),传输数可以是单个的IO请求或合并多个逻辑请求到单个IO请求。
18 (3).Blk_read/s:每秒读取的block数,block相当于扇区的大小,即512字节。旧内核可能不确定。
19 (4).Blk_wrtn/s:每秒写入的block数。
20 (5).Blk_read:总读取的block数。
21 (6).Blk_wrtn:总写入的block数。
22 (7).kB_read/s kB_wrtn/s kB_read kB_wrtn MB_read/s MB_wrtn/s MB_read MB_wrtn: 同上,只是单位不同
23 (8).rrqm/s:每秒合并的读请求数。
24 (9).wrqm/s:每秒合并的写请求数。
25 (10).r/s:每秒读请求数。
26 (11).w/s:每秒写请求数。
27 (12).rsec/s:每秒的读扇区数。
28 (13).wsec/s:每秒的写扇区数。
29 (14).rkB/s:每秒读的kB数。
30 (15).wkB/s:每秒写的kB数。
31 (16).rMB/s:每秒读的MB数。
32 (17).wMB/s:每秒写的MB数。
33 (18).avgrq-sz:平均请求的大小(扇区)。
34 (19).avgqu-sz:平均队列长度。
35 (20).await:IO请求发送给设备和设备执行请求的时间(毫秒)。
36 (21).svctm:设备执行请求的时间(毫秒),此项不准,不可信。
37 (22).%util:I/O请求发送到设备期间,占用CPU时间的百分比。
38  
39 6.网络文件系统(NFS)报告
40 显示每个挂载的网络文件系统统计数据
41 (1).Filesystem:挂载的NFS服务器的主机名和目录
42 (2).rBlk_nor/s:使用read(2)系统调用接口读取的block数,block大小是512byte。
43 (3).wBlk_nor/s:使用write(2)系统调用接口写入的block数,block大小是512byte。
44 (4).rBlk_dir/s:使用O_DIRECT标志位读取的block数。
45 (5).wBlk_dir/s:使用O_DIRECT标志位写入的block数。
46 (6).rBlk_svr/s:NFS客户端通过NFS读请求从服务端读取的block数。
47 (7).wBlk_svr/s:NFS客户端通过NFS写请求往服务端写入的block数。
48 (8).rkB_nor/s wkB_nor/s rkB_dir/s wkB_dir/s rkB_svr/s wkB_svr/s rMB_nor/s wMB_nor/s rMB_dir/s wMB_dir/s rMB_svr/s wMB_svr/s,同上,单位不同而已
49 (9).ops/s:每秒到文件系统的总操作数
50 (10).rops/s:每秒到文件系统的读操作数
51 (11).wops/s:每秒到文件系统的写操作数
52  
53 选项:
54 -c     显示CPU使用率报告。
55 -d     显示设备使用率报告。
56 -h     使-n的NFS报告对人更易读。
57 -k     使统计数据以KB来表示,而不是扇区。
58 -m     使统计数据以MB来表示,而不是扇区。
59 -N     显示注册的设备映射名字,在使用逻辑卷LVM2时很好用。
60 -n     显示网络文件系统报告
61 -p [ { device [,...] | ALL } ] 后面接要监测的设备,例如sda
62 -t     显示时间戳,时间戳的格式受 S_TIME_FORMAT 环境变量影响。
63 -V     显示版本号然后退出
64 -x     显示扩展的统计数据,需要/proc/diskstats,挂载的sysfs,/proc/partitions等支持。
65 -z     如果统计时间内没有活动,iostat就不输出
66  
67 环境
68 iostat命令会受以下环境变量影响
69 S_TIME_FORMAT 如果这个环境变量存在,会影响iostat的时间戳格式,遵循ISO 8601格式
70  
71 例子
72 iostat 显示自启动以来的CPU和设备的报告。
73 iostat -d 2 每2秒间隔持续显示报告
74 iostat -d 2 6 每2秒间隔持续显示报告,显示6次
75 iostat -x hda hdb 2 6 为hda和hdb显示报告,每2秒间隔,显示6次
76 iostat -p sda 2 6 为sda及子分区显示报告,每2秒间隔,显示6次
77  
78 BUGS
79 /proc 文件系统必须以挂载,iostat依赖它。扩展的统计数据只对2.5以上的内核可用。
80 svctm已经没有意义,由于I/O统计是通过block层计算出来的,我们并不知道磁盘驱动器什么时候开始处理一个请求。
81 因此,下一个版本将删除svctm这项。
82  
83 文件
84 /proc/stat 包含系统统计数据
85 /proc/uptime 包含系统uptime.
86 /proc/partitions  包含磁盘统计数据,2.5内核支持
87 /proc/diskstats 包含磁盘统计数据,2.5内核支持
88 /sys contains 块设备的统计数据 (post 2.5 kernels).
89 /proc/self/mountstats 包含网络文件系统统计数据
90  
91 作者
92 Sebastien Godard (sysstat <at> orange.fr)
93  
94 参考
95 sar(1), pidstat(1), mpstat(1), vmstat(8)
96  

 

解读完了iostat的含义,我们来看一个例子,在一个终端执行:

 

1 [root@roger-lab ~]# dd if=/dev/sda of=/dev/null

在另一个终端执行iostat -x 1,截取其中一段:

 

1 avg-cpu:  %user   %nice %system %iowait  %steal   %idle
2            0.00    0.00   22.83   77.17    0.00    0.00
3  
4 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
5 sda           16409.78     0.00  530.43    0.00 135791.30     0.00   256.00     2.05    3.88   2.04 108.26
6 dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
7 dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

 

可以看到一些统计数据,现在我们来算算看:

每个请求的大小:avgrq-sz * 512B / 1024 = 128kB

每秒读的数据量:128kB * r/s = 128kB * 530.43 / 1024 = 66MB

每秒读的数据量(另一种算法):rsec/s * 512B / 1024 / 1024 = 66MB

和我们理解的一样~ OK,iostat就先到这。

2.iotop

有时我们希望知道到底哪个进程产生了IO,这个时候就需要iotop这个工具了。
它的输出和top命令类似,简单直观。官网:http://guichaz.free.fr/iotop/
需要Python 2.5(及以上版本)和 Linux kernel 2.6.20(及以上版本),TASK_DELAY_ACCT,CONFIG_TASKSTATS,TASK_IO_ACCOUNTING,CONFIG_VM_EVENT_COUNTERS这些内核选项开启。

 

1 [root@roger-lab ~]# yum -y install iotop

直接执行:

 

01 Total DISK READ: 43.14 M/s | Total DISK WRITE: 0.00 B/s
02   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
03  8275 be/4 root       43.12 M/s    0.00 B/s  0.00 % 84.28 % dd if=/dev/sda of=/dev/null
04  8281 be/4 root       18.65 K/s    0.00 B/s  0.00 %  3.24 % python /usr/bin/iotop
05     1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
06     2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
07     3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
08     4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
09     5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
10     6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
11     7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
12     8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cgroup]
13     9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
14    10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
15    11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [async/mgr]
16    12 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [pm]
17    13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [sync_supers]
18    14 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bdi-default]
19    15 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd/0]
20    16 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kblockd/0]
21    17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpid]
22    18 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpi_notify]
23    19 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpi_hotplug]
24    20 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ata/0]
25    21 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ata_aux]
26 ...

 

看起来没有什么难度,照例把man翻译一遍:

 

01 名称
02        iotop - 简单的top类I/O监视器
03 总览
04        iotop [OPTIONS]
05 描述
06        iotop根据Linux内核(需要2.6.20及以上)来监测I/O,并且能显示当前进程/线程的I/O使用率。
07        Linux内核build的事后哦,需要开启CONFIG_TASK_DELAY_ACCT和CONFIG_TASK_IO_ACCOUNTING选项,这些选项依赖于CONFIG_TASKSTATS。
08        在采样周期里,iotop按列显示每个进程/线程的I/O读写带宽,同时也显示进程/线程做swap交换和等待I/O所占用的百分比。
09        每一个进程都会显示I/O优先级(class/level),另外在最上面显示每个采样周期内的读写带宽。
10        使用左右箭头来改变排序,r用来改变排序顺序,o用来触发--only选项,p用来触发--processes选项。
11        a用来触发--accumulated选项,q用来退出,i用来改变进程或线程的监测优先级,其它任继健是强制刷新。
12  
13 选项
14        --version 显示版本号然后退出
15        -h, --help 显示帮助然后退出
16        -o, --only 只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
17        -b, --batch 非交互模式,一般用来记录日志
18        -n NUM, --iter=NUM 设置监测的次数,默认无限。在非交互模式下很有用
19        -d SEC, --delay=SEC 设置每次监测的间隔,默认1秒,接受非整形数据例如1.1
20        -p PID, --pid=PID 指定监测的进程/线程
21        -u USER, --user=USER 指定监测某个用户产生的I/O
22        -P, --processes 仅显示进程,默认iotop显示所有线程
23        -a, --accumulated 显示累积的I/O,而不是带宽
24        -k, --kilobytes 使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用。
25        -t, --time 加上时间戳,非交互非模式。
26        -q, --quiet 禁止头几行,非交互模式。有三种指定方式。
27               -q     只在第一次监测时显示列名
28               -qq    永远不显示列名。
29               -qqq   永远不显示I/O汇总。
30 参见
31        ionice(1), top(1), vmstat(1)
32 作者
33        iotop was written by Guillaume Chazarain.
34        This manual page was started by Paul Wise for the Debian project and is
35        placed in the public domain.

 

 ok,这篇文章就到这里,大家可以和dd配合使用,做做实验看看自己系统的IO状况。

转载:http://kerrigan.sinaapp.com/post-11.html

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值