iostat与iotop
来源:互联网 发布:mac把网页保存为图片 编辑:程序博客网 时间:2024/05/21 20:23
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
1
[root@roger-lab tmp]
# rpm -qf /usr/bin/iostat
2
sysstat-9.0.4-20.el6.i686
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
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
97
http://pagesperso-orange.fr/sebastien.godard/
解读完了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
- iostat与iotop
- iostat,iotop
- Linux 下的几个命令(iostat、iotop、strace、inotifywait)
- iotop
- iotop
- iotop
- Vmstat与iostat详解
- Vmstat与iostat
- iostat与vmstat
- iostat
- iostat
- IOSTAT
- iostat
- iostat
- iostat
- iostat
- iostat
- iostat
- JAVA多线程实现生产者——消费者
- java static
- codeforces 295A - Greg and Array
- win7安装ubuntu双系统
- c++ primer 第五版学习笔记-第二章-链接的那些事
- iostat与iotop
- Docker 入门教程
- zoj 3818 Pretty Poem(暴力处理字符串)2014年牡丹江赛区网络赛
- 优化 难度 1.0/5.0
- 单链表的排序(归并排序)
- java网络编程-获取域名和ip地址
- 并发编程--并发任务间的数据交换
- C#入门——视频总结
- 【IOS 开发】Object - C 语法 之 类型转换