Linux 存储设备监测

一.iostat
1.使用:
iostat -x 1 每隔一秒显示各个磁盘的读写情况

2.数据分析:
[root@huanxiangwu ~]# iostat -x 1
Linux 2.6.18-194.3.1.el5 (huanxiangwu.com) 2010年06月01日

avg-cpu: %user %nice %system %iowait %steal %idle
0.23 1.86 3.65 1.76 0.00 92.49

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
hda 0.63 3.06 5.16 0.88 79.64 31.49 18.40 0.04 6.36 3.53 2.13
hda1 0.15 0.00 0.01 0.00 0.32 0.01 26.43 0.00 5.50 5.29 0.01
hda2 0.47 3.06 5.15 0.88 79.25 31.49 18.38 0.04 6.37 3.53 2.13
dm-0 0.00 0.00 5.56 3.94 79.07 31.49 11.64 0.14 14.42 2.24 2.13
dm-1 0.00 0.00 0.02 0.00 0.12 0.00 8.00 0.00 16.21 0.75 0.00

第一部分显示自上次重启以来的CPU使用情况的平均值
重点看第二部分Device下面的数据:
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 (因为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% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
另外 await 的参数也要多和 svctm 来参考。差的过高就一定有 IO 的问题。
avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高。也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的。

二.vmstat

[root@huanxiangwu ~]# vmstat -p hda1 //显示磁盘分区的读写统计信息
hda1 reads read sectors writes requested writes
78 2392 14 40
reads: 分区总的读次数
read sectors: 分区总的读取扇区的次数
writes : 分区总的写次数
requested writes: 分区总的请求次数

三.lsof
1.使用:
lsof -c bash //列出由bash shell打开的文件
lsof -d cwd //列出作为当前工作目录打开的目录
lsof -u huanxiangwu //列出用户huanxiangwu打开的文件和目录
lsof /mnt/sda1 //列出sda1文件系统中打开的任意文件或目录
lsof +d /mnt/sda1/test //列出/mnt/sda1/test目录下打开的任意文件或目录

2.数据分析:
[root@huanxiangwu ~]# lsof | less //显示打开了文件和目录的进程
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 38652 1048800 /sbin/init
init 1 root mem REG 253,0 125736 1474597 /lib/ld-2.5.so
init 1 root mem REG 253,0 1611564 1474599 /lib/libc-2.5.so
init 1 root mem REG 253,0 16428 1474611 /lib/libdl-2.5.so
init 1 root mem REG 253,0 245376 1478544 /lib/libsepol.so.1
init 1 root mem REG 253,0 93508 1478545 /lib/libselinux.so.1
init 1 root 10u FIFO 0,17 1176 /dev/initctl

Command、PID 和 User 列分别表示进程的名称、进程标识符 (PID) 和所有者名称。Device、SIZE/OFF、Node 和 Name 列涉及到文件本身的信息,分别表示指定磁盘的名称、文件的大小、索引节点(文件在磁盘上的标识)和该文件的确切名称。根据 UNIX 版本的不同,可能将文件的大小报告为应用程序在文件中进行读取的当前位置(偏移量)。

FD 和 Type 列的含义最为模糊,它们提供了关于文件如何使用的更多信息。FD 列表示文件描述符,应用程序通过文件描述符识别该文件。Type 列提供了关于文件格式的更多描述。cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库。u 表示该文件被打开并处于读取/写入模式,而不是只读 (r) 或只写 (w) 模式。

与 FD 列相比,Type 列则比较直观。根据具体操作系统的不同,您会发现将文件和目录称为 REG 和 DIR,其他可能的取值为 CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。

你可能感兴趣的:(linux,lsof,vmstat,iostat,休闲)