参数说明:
rrqm/s:每秒进行merge的读操作数目,即delta(rmerge)/s。
wrqm/s:每秒进行merge的写操作数目,即delta(wmerge)/s。
r/s:每秒完成的读I/O设备的次数,即delta(rio)/s。
w/s:每秒完成的写I/O设备的次数,即delta(wio)/s。
rsec/s:每秒读扇区数,即delta(rsect)/s。
wsec/s:每秒写扇区数,即delta(wsect)/s。
rkB/s:每秒读K字节数。是rsect/s的一半,因为每扇区大小为512字节。
wkB/s:每秒写K字节数。是wsect/s的一半。
avgrq-sz:平均每次设备I/O操作的数据大小(即扇区),即delta(rsect+wsect)/delta(rio+wio)。
avgqu-sz:平均I/O队列的长度,即delta(aveq)/s/1000(除以1000是因为aveq的单位为毫秒)。
await:平均每次设备I/O操作的等待时间(单位:毫秒),即delta(ruse+wuse)/delta(rio+wio)。
svctm:平均每次设备I/O操作的服务时间(单位:毫秒),即delta(use)/delta(rio+wio)。
%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的,即delta(use)/s/1000(因为use的单位为毫秒)。
大家看着这些参数和名词解释可能不太明白,其实在工作中我们只关注以下几个方面即可:
如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
如果idle小于70%,I/O的压力就比较大了,说明读取进程中有较多的wait。同时还可以结合vmstat查看b参数(等待资源的进程数)和wa参数(I/O等待所占用的CPU时间的百分比,高过30%时I/O的压力就比较高了),帮助了解I/O的负荷情况。
另外还可以参考如下一些情况:svctm应小于await,因为同时等待请求的等待时间被重复计算了。一般来说,svctm的大小和磁盘性能有关,CPU/内存的负荷也会对其有一定的影响,请求过多就会间接导致svctm增加。
await的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式。如果svctm比较接近await,说明I/O几乎没有等待时间;如果await远大于svctm,说明I/O队列太长,应用得到的响应时间也变长。如果响应时间超过了用户允许的范围,这时就可以考虑更换更快的磁盘、调整内核elevator的算法、优化应用或者升级CPU。
队列长度(avgqu-sz)也可作为衡量系统I/O负荷的指标,但由于avgqu-sz是按照单位时间计算出来的平均值,所以不能反映瞬间的I/O洪水。
4)查看Linux系统中某目录的大小,这在工作中经常会遇到。我们可以用命令:du-sh目录名来查看,如下所示:
检查是否有分区使用率(Use%)过高(比如超过90%)的情况,如发现某个分区空间接近用完,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录,然后按照从大到小的顺序,找出系统中占用最多空间的前10个文件或目录。
- [root@localhost /]# du -sh /root
- 1.2M /root
- # du -cksh *| sort -rn| head -n 10
5)dd命令在Linux系统中也经常用到,很多时候维护系统工作时需要使用到它。用dd命令可以把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。我碰到的几个需要用到dd命令的地方如下。
制作交换文件的时候,例如:
制作驱动盘的时候,例如,将硬盘上的驱动文件拷贝到一个软驱中:
- dd if=/dev/zero of=/swapfile bs=1024 count=65536
制作ISO镜像的时候,例如:
- dd if=rhel40.img of=/dev/fd0 bs=10k 或者
- dd if=mptlinux-3.02.68-1-rhel4.i686.dd of=/dev/fd0 bs=10k
- dd if=/dev/cdrom of=/root/cd1.iso
当然也可以用mkisofs命令来制作ISO镜像。
另外,重装系统的时候,我喜欢用dd命令来破坏系统的分区表。由于此命令破坏性极大,会带来严重的后果,为了防止读者误操作,这里就不介绍了,有兴趣的读者可自行研究。
下面将分别介绍dd命令的参数,如下:
输入文件名,默认为标准输入。
- if=file
输出文件名,默认为标准输出。
- of=file
一次读入bytes个字节(即一个块大小为bytes个字节)。
- ibs=bytes
一次写bytes个字节(即一个块大小为bytes个字节)。
- obs=bytes
同时设置读写块的大小为bytes,可代替ibs和obs。
- bs=bytes
一次转换bytes个字节,即转换缓冲区大小。
- cbs=bytes
从输入文件开头跳过blocks个块后再开始复制。
- skip=blocks
从输出文件开头跳过blocks个块后再开始复制(通常当输出文件介质是磁盘或磁带时才有效)。
- seek=blocks
仅拷贝blocks个块,块大小等于ibs指定的字节数。
- count=blocks