EDA365电子论坛网

标题: 学习一下iostat的使用方法吧 [打印本页]

作者: ulppknot    时间: 2020-3-18 09:56
标题: 学习一下iostat的使用方法吧

& p4 h$ j/ U3 c" M" H! B安装:yum install sysstat4 F3 W$ E; \3 [6 g6 V
% Q$ H1 h2 C7 h* e0 F) w: T9 N- o
查看与LVM对应关系:lvdisplay|awk  '/LV Name/{n=$3} /Block device/{d=$3; sub(".*:","dm-",d); print d,n;}'- X9 E: g( W0 D- g1 [2 ]
% d4 o  b' q- n, d# D5 z
实例: / X& H- ^& L5 [9 u% F
  y" _4 c% L* Z% [5 K2 Q
$iostat -x 1, \& `  y1 r: T+ a2 P* `
Linux 2.6.33-fukai (fukai-laptop)          _i686_    (2 CPU)/ [' y3 y- w  J
avg-cpu:  %user   %nice %system %iowait  %steal   %idle8 n3 T1 B  }% w. Z( m0 C
           5.47    0.50    8.96   48.26    0.00   36.82# U/ e/ h: v1 y$ n" }* S0 z: f0 {

  W, V+ n4 k$ e* f1 V7 ZDevice:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util* }% C: q1 [( Z4 D
sda               6.00   273.00   99.00    7.00  2240.00  2240.00    42.26     1.12   10.57   7.96  84.40, Y4 w9 ?# a  X0 n" e
sdb               0.00     4.00    0.00  350.00     0.00  2068.00     5.91     0.55    1.58   0.54  18.80
5 }- }2 A$ C% M3 h& M' ?8 m6 ]- e . S% E& n. L( {+ x. V
说明:
* O) ^" @8 H* ?9 F# O; d, a1 _  Srrqm/s:   每秒进行 merge 的读操作数目。即 delta(rmerge)/s
: g  L/ B  _1 t/ U* D! R% i  r" W. g/ zwrqm/s:  每秒进行 merge 的写操作数目。即 delta(wmerge)/s* \* g* s3 x' @  ?/ Q
r/s:           每秒完成的读 I/O 设备次数。即 delta(rio)/s" l& D! ^1 P: m5 B( Z
w/s:         每秒完成的写 I/O 设备次数。即 delta(wio)/s4 P4 `; Z  D6 ?/ e4 s2 f1 d0 m
rsec/s:    每秒读扇区数。即 delta(rsect)/s; a! [+ c# o. U9 K$ w$ w
wsec/s:  每秒写扇区数。即 delta(wsect)/s
' H# e5 m/ C. ^7 a6 ^5 i) _rkB/s:      每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
# R( i% O: ?4 _* g0 s: Z! D6 pwkB/s:    每秒写K字节数。是 wsect/s 的一半。(需要计算)# {9 J0 d2 v4 }, T* p. D1 N& s
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
' n8 s8 _% a+ g1 C, Gavgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
4 x3 w- n: X7 z& Vawait:    平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
. l( c5 Q) X2 y6 f5 Jsvctm:   平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)' Z; C% K5 N6 u! G/ H! p; {  ]- [
%util:      一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
- m) W1 Q4 `# F+ M$ K) X/ G
: O# S$ N2 G; t9 M
  H' J- Q+ z4 b" y4 J5 a如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
/ m! d8 X/ g* t& f: zidle小于70% IO压力就较大了,一般读取速度有较多的wait.
, B; y# C3 ]) b同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)9 Q& j, L. J0 f% ?/ j4 R: I2 U
另外 await 的参数也要多和 svctm 来参考。差的过高就一定有 IO 的问题。
& m# _5 o* e- L9 E: X; S3 `9 Navgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高。也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的。6 g, l; F$ }  H) y

( n- o6 o; a' P( ~
, n% ]% X9 m' k! p
  u) o# {' P  ~1 _. Q
, F8 {/ t9 `! g) J" d$ @
+ z: |6 b8 `6 {+ V+ L+ C8 w, e9 {, ?7 w1 W- w8 [$ c# ]
另外还可以参考
/ ]  I- p7 T, U7 n; b- ~svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
+ G4 y) @" v; }- a5 \. f队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。
  c: \% A) x* z2 n. u
, X1 N& G. F2 ?8 u# v/ U+ l% Y6 w" f' k. p8 E  k
注:
; x% n9 F2 u; \iostat在内核2.4和内核2.6中数据来源不太一样,对于kernel 2.4, iostat 的数据的主要来源是 /proc/partitions;在2.6中,数据来源主要是/proc/diskstats和/sys/block/sd*/stat这两个文件* w. E8 f/ g8 M7 ^& R
& X8 s# d9 b" _7 E
cat /proc/diskstats | grep sda
# B) X6 U+ f( X( ]: \  ?   8    0 sda 8608337 4650455 896098215 9666364 21179395 77544435 867642604 170314316 0 11500968 1799783326 n# w6 v5 D9 T6 \$ h3 W! K
   8    1 sda1 609547 46647 9993834 1477736 10316312 28618957 311482264 6715428 0 3775012 8192352
0 A: T$ _' H8 A+ T/ U8 I" V' n( f! U   8    2 sda2 279787 122 2239272 166044 24 85 872 920 0 166864 166940
2 R/ V* T& B2 g2 O   8    3 sda3 7718898 4603552 883863197 8021508 10863059 48925393 556159468 163597968 0 8365140 171617840$ s' m7 m3 n8 g; v2 d

. S  f+ k" s" Z! ~  Z+ @第1列 : 磁盘主设备号(major)
9 g# g8 H/ ^, ]& ~1 `$ ^第2列 : 磁盘次设备号(minor)
3 a, |, t; q/ a- T第3列 : 磁盘的设备名(name)
' p7 Q/ r6 m( `- d$ k+ x5 V8 R" z第4列 : 读请求总数(rio)% F0 x8 S3 u/ \+ `
第5列 : 合并的读请求总数(rmerge)
4 j! i/ _" ]1 H) r4 [6 |第6列 : 读扇区总数(rsect)
% P+ E: x- v9 L/ p1 q第7列 :   读数据花费的时间,单位是ms.(从__make_request到 end_that_request_last)(ruse)
4 ]# n. v+ V1 ~2 l7 R# K1 A2 |7 X第8列 :   写请求总数(wio)5 }7 A- u/ g# I+ e# L& O6 y- a
第9列 :   合并的写请求总数(wmerge), F5 f5 ]: b* ?8 e6 M, ~
第10列 : 写扇区总数(wsect)
9 M1 H0 S# ?1 v- F( G6 k第11列 : 写数据花费的时间,单位是ms. (从__make_request到 end_that_request_last)(wuse): D  k- y1 ^' p; {0 y
第12列 : 现在正在进行的I/O数(running),等于I/O队列中请求数8 d1 `0 N% q- y# i8 v* Q
第13列 : 系统真正花费在I/O上的时间,除去重复等待时间(aveq)
( d! e, ~( y0 ]9 Q3 P1 f第14列 : 系统在I/O上花费的时间(use)。
作者: ExxNEN    时间: 2020-3-18 18:01
学习一下iostat的使用方法吧




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2