如何查看Linux服务器硬盘I/O读写负载

首先 、用top命令查看

top – 16:15:05 up 6 days, 6:25, 2 users, load average: 1.45, 1.77, 2.14
Tasks: 147 total, 1 running, 146 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2% us, 0.2% sy, 0.0% ni, 86.9% id, 12.6% wa, 0.0% hi, 0.0% si
Mem: 4037872k total, 4003648k used, 34224k free, 5512k buffers
Swap: 7164948k total, 629192k used, 6535756k free, 3511184k cached

查看12.6% wa

IO等待所占用的CPU时间的百分比,高过30%时IO压力高

其次、 用iostat -x 1 10

如果 iostat 没有,要 yum install sysstat

avg-cpu: %user %nice %sys %iowait %idle
0.00 0.00 0.25 33.46 66.29

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 1122 17.00 9.00 192.00 9216.00 96.00 4608.00 123.79 137.23 1033.43 13.17 100.10
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

查看%util 100.10 %idle 66.29

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

idle小于70% IO压力就较大了,一般读取速度有较多的wait.

同时可以结合vmstat 查看查看b参数(等待资源的进程数)

vmstat -1

如果你想对硬盘做一个IO负荷的压力测试可以用如下命令

time dd if=/dev/zero bs=1M count=2048 of=direct_2G

此命令为在当前目录下新建一个2G的文件

我们在新建文件夹的同时来测试IO的负荷情况

再通过如下脚本查看高峰的进程io情况

iostat查看linux硬盘IO性能

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参数()

下面是别人写的这个参数输出的分析
#iostat-x1
avg-cpu:%user%nice%sys%idle
16.240.004.3179.44
Device:rrqm/swrqm/sr/sw/srsec/swsec/srkB/swkB/savgrq-szavgqu-szawaitsvctm%util
/dev/cciss/c0d0
0.0044.901.0227.558.16579.594.08289.8020.5722.3578.215.0014.29
/dev/cciss/c0d0p1
0.0044.901.0227.558.16579.594.08289.8020.5722.3578.215.0014.29
/dev/cciss/c0d0p2
0.000.000.000.000.000.000.000.000.000.000.000.000.00
上面的iostat输出表明秒有28.57次设备I/O操作:总IO(io)/s=r/s(读)+w/s(写)=1.02+27.55=28.57(次/秒)其中写操作占了主体(w:r=27:1)。
平均每次设备I/O操作只需要5ms就可以完成,但每个I/O请求却需要等上78ms,为什么?因为发出的I/O请求太多(每秒钟约29个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:
平均等待时间=单个I/O服务时间*(1+2+…+请求总数-1)/请求总数
应用到上面的例子:平均等待时间=5ms*(1+2+…+28)/29=70ms,和iostat给出的78ms的平均等待时间很接近。这反过来表明I/O是同时发起的。
每秒发出的I/O请求很多(约29个),平均队列却不长(只有2个左右),这表明这29个请求的到来并不均匀,大部分时间I/O是空闲的。
一秒中有14.29%的时间I/O队列中是有请求的,也就是说,85.71%的时间里I/O系统无事可做,所有29个I/O请求都在142毫秒之内处理掉了。
delta(ruse+wuse)/delta(io)=await=78.21=>delta(ruse+wuse)/s=78.21*delta(io)/s=78.21*28.57=2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为2232.8ms/1000ms=2.23,而iostat给出的平均队列长度(avgqu-sz)却为22.35,为什么?!因为iostat中有bug,avgqu-sz值应为2.23,而不是22.35。

时间: 2024-11-17 09:20:36

如何查看Linux服务器硬盘I/O读写负载的相关文章

如何查看linux软中断信息

这篇文章主要是介绍如何详细的查看linux软中断信息. 涉及linux软中断原理部分请参考:http://book.51cto.com/art/200912/168622.htm 一.利用sysstat 中的工具包mpstat ps:图片是截取个人电脑,所以没什么压力: 16时32分48秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 16时32分49秒 all 4.52 0.00 1.26 0.00 0.00 0.00 0

查看Linux服务器下的内存使用情况

查看Linux服务器下的内存使用情况 ,可以使用命令free -m.注意此命令只在Linux下有效,在FreeBSD中没有此命令.命令如下所示: used:已经使用的内存数 free:空闲的内存数 shared:多个进程共享的内存总额 -buffers/cache:(已用)的内存数,即used-buffers-cached +buffers/cache:(可用)的内存数,即free+buffers+cached 得出结论: 可用内存的计算公式为: 可用内存=free+buffers+cached

查看Linux系统信息的常用命令

查看Linux系统信息的常用命令 一 系统: # uname -a # 查看内核/操作系统/CPU信息 # cat /etc/issue # cat /etc/redhat-release # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量   二 资源: # f

查看Linux系统版本信息的方法小结

  如何查看Linux系统使用的版本信息呢? 下面这篇文章收集.整理了一些常见的查看Linux系统版本的方法.由于手头只有Oracle Linux.Centos Linux.Redhat Linux三个版本Linux,所以像Debian.Ubuntu之类的Linux系统,下面方法在这些版本都没测试过. 1:more /etc/issue 命令查看 1.1 Oracle Linux 代码如下: [root@DB-Server ~]# more /etc/issueOracle Linux Serv

查看Linux版本信息

如何查看Linux系统使用的版本信息呢? 下面这篇文章收集.整理了一些常见的查看Linux系统版本的方法.由于手头只有Oracle Linux.Centos Linux.Redhat Linux三个版本Linux,所以像Debian.Ubuntu之类的Linux系统,下面方法在这些版本都没测试过.   1:more /etc/issue 命令查看 1.1 Oracle Linux   [root@DB-Server ~]# more /etc/issue Oracle Linux Server

查看Linux系统CPU、内存信息和操作系统的版本信息

经常要查看Linux服务器的CPU,内存信息以及操作系统版本等信息,总结一下常用的命令,以便以后查阅 . 1.查看CPU型号(8个逻辑CPU) [[root@mail ~]# cat /proc/cpuinfo |grep "name" |cut -f2 -d: |uniq -c      8  Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz 2.查看物理CPU个数(两个4核CPU) [root@mail ~]# cat /proc/cp

Linux如何使用shell查看Linux是32位还是64

  现在绝大多数用户使用的是Windows系统,都知道Windows系统有分32位和64位,其实Linux系统也有32位和64位之分,你知道你的Linux系统是几位的吗?下面小编就教你如何使用shell查看Linux是32位还是64位. 手动查看系统位数 查看linux系统位数,可以分别执行以下两个命令 getconf WORD_BIT 用于获取word的位数 getconf LONG_BIT 用于获取long的位数 对于64位系统以上两个命令应该分别得到32和64. 判断linux系统是32位

如何查看linux版本

  1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version Linux version 2.6.9-22.ELsmp (bhcompile@crowe.devel.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005 2) [root@q1test01 ~]# uname -a Linux q1test01 2.

如何查看Linux系统中分区的卷标信息?

如何查看Linux系统中分区的卷标信息? 我们可以通过e2label命令来实现: 用法: e2label device [新卷标] 示例: e2label /dev/hdxn where x=a,b,c,d....; n=1,2,3... [root@localhost ~]# e2label /dev/sda1本地磁盘