Linux - vmstat iostat详解

vmstat -n 3    (每个3秒刷新一次) 
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 144 186164 105252 2386848 0 0 18 166 83     2 48 21 31 0 
2 0 144 189620 105252 2386848 0 0     0 177 1039 1210 34 10 56 0 
0 0 144 214324 105252 2386848 0 0     0 10 1071 670 32 5 63 0 
0 0 144 202212 105252 2386848 0 0     0 189 1035 558 20 3 77 0 
2 0 144 158772 105252 2386848 0 0     0 203 1065 2832 70 14 15 0
vmstat所带参数请用man vmstat查看
Procs 
r: 等待运行的进程数 b: 处在非中断睡眠状态的进程数 w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间 
Memory 
swpd: 虚拟内存使用情况,单位:KB
free: 空闲的内存,单位KB
buff: 被用来做为缓存的内存数,单位:KB
Swap 
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
IO 
bi: 发送到块设备的块数,单位:块/秒
bo: 从块设备接收到的块数,单位:块/秒
System 
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数
CPU 
按 CPU 的总使用百分比来显示 
us: CPU 使用时间
sy: CPU 系统使用时间
id: 闲置时间
准测
r,b≈0,
如果fre,将会出现连续不断的页面调度,将导致系统性能问题。
对于page列,re,pi,po,cy维持于比较稳定的状态,PI率不超过5,如果有pagin发生,那么关联页面必须先进行pageout
在内存相对紧张的环境下pagein会强制对不同的页面进行steal操作。如果系统正在读一个大批的永久页面,你也许可以看到po和pi列
会出现不一致的增长,这种情景并不一定表明系统负载过重,但是有必要对应用程序的数据访问模式进行见检查。在稳定的情况下,扫描率和重置率几乎相等,在
多个进程处理使用不同的页面的情况下,页面会更加不稳定和杂乱,这时扫描率可能会比重置率高出。
faults列,in,sy,cs会不断跳跃,这里没有明确的限制,唯一的就是这些值最少大于100
cpu列,us,sys,id和wa也是不确定的,最理想的状态是使cpu处于100%工作状态,单这只适合单用户的情况下。
如果在多用户环境中us+sys》80,进程就会在运行队列中花费等待时间,响应时间和吞吐量就会下降。wa>40表明磁盘io没有也许存在不合理的平衡,或者对磁盘操作比较频繁,
vmstat各项:
procs: 
r-->在运行队列中等待的进程数 
b-->在等待io的进程数 
w-->可以进入运行队列但被替换的进程 
memoy 
swap-->现时可用的交换内存(k表示) 
free-->空闲的内存(k表示) 
pages 
re--》回收的页面 
mf--》非严重错误的页面 
pi--》进入页面数(k表示) 
po--》出页面数(k表示) 
fr--》空余的页面数(k表示) 
de--》提前读入的页面中的未命中数 
sr--》通过时钟算法扫描的页面 
disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号 
fault 显示每秒的中断数 
in--》设备中断 
sy--》系统中断 
cy--》cpu交换 
cpu 表示cpu的使用状态 
cs--》用户进程使用的时间 
sy--》系统进程使用的时间 
id--》cpu空闲的时间 
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。 
如果pi,po 长期不等于0,表示内存不足。 
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。
Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。
  在Linux下有很多系统性能分析工具,比较常见的有top、free、ps、time、timex、uptime等。下文将介绍几个较为重要的性能分析工具vmstat、iostat和sar及其使用。 
   用vmstat监视内存使用情况  
  vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。 
  vmstat的语法如下: 

  vmstat [-V] [-n] [delay [count]]
  其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看

使用iostat分析IO性能

对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。

 

下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。

 

1.不加选项执行iostat

我们先来看直接执行iostat的输出结果:

复制代码
linux # iostat
Linux 2.6.16.60-0.21-smp (linux)     06/12/12

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.00    0.05    0.06    0.00   99.81

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.58         9.95        37.47    6737006   25377400
sdb               0.00         0.00         0.00        824          0
复制代码

单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:

avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值

Device: 各磁盘设备的IO统计信息

 

对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。Device中各列含义如下:

  • Device: 以sdX形式显示的设备名称
  • tps: 每秒进程下发的IO读、写请求数量
  • Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
  • Blk_wrtn/s: 每秒写扇区数量
  • Blk_read: 取样时间间隔内读扇区总数量
  • Blk_wrtn: 取样时间间隔内写扇区总数量

我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。

 

2.指定采样时间间隔与采样次数

与sar命令一样,我们可以以"iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:

复制代码
linux # iostat -d 1 2
Linux 2.6.16.60-0.21-smp (linux)     06/13/12

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.55         8.93        36.27    6737086   27367728
sdb               0.00         0.00         0.00        928          0

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               2.00         0.00        72.00          0         72
sdb               0.00         0.00         0.00          0          0
复制代码

以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。

 

3.以kB为单位显示读写信息(-k选项)

我们可以使用-k选项,指定iostat的部分输出结果以kB为单位,而不是以扇区数为单位:

复制代码
linux # iostat -d -k
Linux 2.6.16.60-0.21-smp (linux)     06/13/12

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.55         4.46        18.12    3368543   13686096
sdb               0.00         0.00         0.00        464          0
复制代码

以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)

 

4.更详细的io统计信息(-x选项)

为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:

linux # iostat -x -k -d 1
Linux 2.6.16.60-0.21-smp (linux)     06/13/12

……
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00  9915.00    1.00   90.00     4.00 34360.00   755.25    11.79  120.57   6.33  57.60

以上各列的含义如下:

  • rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
  • wrqm/s: 每秒对该设备的写请求被合并次数
  • r/s: 每秒完成的读次数
  • w/s: 每秒完成的写次数
  • rkB/s: 每秒读数据量(kB为单位)
  • wkB/s: 每秒写数据量(kB为单位)
  • avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
  • avgqu-sz: 平均等待处理的IO请求队列长度
  • await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
  • svctm: 平均每次IO请求的处理时间(毫秒为单位)
  • %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

 

对于以上示例输出,我们可以获取到以下信息:

  1. 每秒向磁盘上写30M左右数据(wkB/s值)
  2. 每秒有91次IO操作(r/s+w/s),其中以写操作为主体
  3. 平均每次IO请求等待处理的时间为120.57毫秒,处理耗时为6.33毫秒
  4. 等待处理的IO请求队列中,平均有11.79个请求驻留

 

以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:

util = (r/s+w/s) * (svctm/1000)

对于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值