iostat命令
iostat是I/O statistics(输入/输出统计)的缩写,是对系统的磁盘IO操作进行监视。显示磁盘读写操作的统计信息,同时给出CPU的使用情况。同vmstat一样,iostat也不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
有些机器上没有iostat工具,需要安装一个Systat的工具包,Systat是个开源软件,安装完会多出三个命令:iostat、sar和mpstat。
iostat的语法如下
iostat [ options... ] [ <interval> [ <count> ] ]
Options are:
[ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x ]
[ { <device> [ ... ] | ALL } ] [ -p [ { <device> | ALL } ] ]
-c 显示CPU使用情况
-d 显示磁盘使用情况
-k 每秒以KB为单位显示数据
-t 打印出统计信息开始执行时间
-x device 指定要 统计的磁盘设备名称,默认为所有磁盘设备
interval 指定两次统计间隔时间
count 指定统计的次数,达到统计次数后将会自动退出
例如:
iostat -c
Linux 2.6.9_7-7-0-0 (webserver) 07/09/2012
avg-cpu: %user %nice %sys %iowait %idle
1.09 0.00 0.78 0.03 98.09
由于使用了-c参数,只是显示系统cpu的统计情况,输出项每项的含义和sar命令的输出完全相同
下面通过iostat -d参数查看系统磁盘的使用情况
iostat -d 2 3
Linux 2.6.9_7-7-0-0 (webserver) 07/09/2012
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
cciss/c0d0 11.68 10.84 74.20 281061337 1923262480
cciss/c0d0p1 0.00 0.00 0.00 624 696
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
cciss/c0d0 0.00 0.00 0.00 0 0
cciss/c0d0p1 0.00 0.00 0.00 0 0
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
cciss/c0d0 34.50 0.00 4388.00 0 8776
cciss/c0d0p1 0.00 0.00 0.00 0 0
每项的输出含义如下:
Blk_read/s
每秒读取的数据块数
Blk_wrtn/s
每秒写入的数据块数
Blk_read
读取的所有块数
Blk_wrtn
写入的所有块数
需要注意的是,上面输出的第一项是系统从启动到统计时的所有传输信息,第二次输出的数据才代表监测的时间段内系统的传输值。
可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有一个基本的了解:如果Blk_read/s值很大,表示磁盘的读写很频繁,可以考虑优化磁盘或程序;如果blk_read/s的值很大,表示磁盘的读操作很多,可以将读取的数据输入内存中进行操作。有一个规则可以遵循:长期的、超大的数据读写,肯定是不正常的,通常会影响性能。
iostat -x组合还提供了对每个磁盘的单独统计,如果不指定磁盘,默认是对所有的磁盘进行统计。
iostat -x /dev/cciss/c0d0 2 3
Linux 2.6.9_7-7-0-0 (webserver) 07/09/2012
avg-cpu: %user %nice %sys %iowait %idle
1.09 0.00 0.78 0.03 98.09
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
cciss/c0d0 0.05 1.11 1.40 10.28 10.84 74.43 5.42 37.22 7.30 0.11 9.34 0.34 0.40
avg-cpu: %user %nice %sys %iowait %idle
0.56 0.00 18.81 3.25 77.38
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
cciss/c0d0 0.00 0.00 65.00 0.00 852.00 0.00 426.00 0.00 13.11 0.29 4.43 4.15 27.00
avg-cpu: %user %nice %sys %iowait %idle
7.05 0.00 5.18 0.44 87.34
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
cciss/c0d0 0.00 0.00 11.50 2.50 696.00 20.00 348.00 10.00 51.14 0.05 4.07 2.29 3.20
输出和sar -d输出基本相同,
rrqm/s表示每秒进行合并的读操作数目。
wrqm/s表示每秒进行合并的写操作数目。
r/s表示每秒完成读IO设备的次数
w/s表示每秒完成写IO设备的次数
rsec/s每秒读取的扇区数
wsec/s每秒写入的扇区数。
free命令
free是监控linux内存使用的指令。free -m
total used free shared buffers cached
Mem: 48291 33630 14660 0 24 22437
-/+ buffers/cache: 11168 37122
Swap: 0 0 0
free -m表示查看以M为单位的内存使用情况,重点需要关注free列与cached列的输出值。
由输出可以得知,系统共有48G内存,系统空闲内存还有14660MB,其中buffer cache占了24MB,page cache站了22437MB。
由此可知系统缓存了很多的文件和目录,对于应用程序来说还有37122MB内存可以用,当然这37122MB内存包含了buffer cache和page cache的值,从swap项看出,交换分区还未使用,从应用的角度来说,系统的内存资源还非常充足。
一般有这样的一个经验公式:
当应用程序可用内存/系统物理内存 > 70%时,表示系统内存资源非常充足,不影响性能;
当应用程序可用内存/系统物理内存 < 20%时,表示系统内存资源紧缺,需要增加系统内存;
当 20% < 应用程序可用内存/系统物理内存 < 70%时,表示系统内存基本能满足需求,暂时不影响系统性能
free -g -s 5
total used free shared buffers cached
Mem: 47 29 18 0 0 27
-/+ buffers/cache: 1 45
Swap: 0 0 0
total used free shared buffers cached
Mem: 47 29 18 0 0 27
-/+ buffers/cache: 1 45
Swap: 0 0 0
free命令还可以实时监控内存的使用情况,使用-s参数可以在指定的时间段内不间断的监控内存使用情况。
其中-g表示以G(1024M)为单位显示内存使用情况