|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
& }) R+ H1 s3 n4 B, u安装:yum install sysstat
8 d$ O& F" J% \% C' k6 U; p# o6 G) @3 c$ l* R
查看与LVM对应关系:lvdisplay|awk '/LV Name/{n=$3} /Block device/{d=$3; sub(".*:","dm-",d); print d,n;}'" R1 u# G/ W# r! E1 `
: l5 y, p: ^$ R7 n; X' I 实例:
! j4 V5 q6 g8 K1 j, ?9 ~% e- z6 k/ z9 d" V
$iostat -x 1! U% m6 X1 h" t2 A
Linux 2.6.33-fukai (fukai-laptop) _i686_ (2 CPU)
7 z* L, ?- V* f; S8 n1 w, |avg-cpu: %user %nice %system %iowait %steal %idle, J, Q* `3 s2 L% O
5.47 0.50 8.96 48.26 0.00 36.82% `& b1 s: P, ? z, F
" j7 c; z a6 Z' t( t" W( G- ?Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
5 f, P0 {9 g, ~5 F7 E$ L+ tsda 6.00 273.00 99.00 7.00 2240.00 2240.00 42.26 1.12 10.57 7.96 84.40+ j6 s+ c% \9 g4 d% P
sdb 0.00 4.00 0.00 350.00 0.00 2068.00 5.91 0.55 1.58 0.54 18.80
: g1 |! e, _$ I1 @4 ?% @ 5 t" A' Y1 i! D3 s$ f" F
说明:6 _& Y4 I0 q0 n3 `) u( r$ L/ Q+ l
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
5 y& ?) x* [" d0 vwrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s/ E! {* l* n- a) c
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
! Y& ?0 I) C- m' [+ ]$ N: K$ Yw/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
2 s4 ^, Q7 [/ j, L: U5 [3 prsec/s: 每秒读扇区数。即 delta(rsect)/s
& A; E7 w2 r: [! `1 d( ~wsec/s: 每秒写扇区数。即 delta(wsect)/s3 d4 @* A( m+ {( A2 ]
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
* W- a0 o* S: {* o* d0 C8 YwkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)) ?( n- q" C$ M) a& l, B9 I5 X) n
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
3 ?5 q" j. }# p2 ^& Ravgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。! m# L( v4 u2 s
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)0 k: Y e8 b" ?0 _" g+ D4 D! I
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)6 R; r+ ^8 V6 x4 L) Z- V h
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)5 t4 o9 ~ E4 q
' f0 ]1 C, E( u 2 H2 z7 M' O9 q1 k( W0 `
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
+ ~8 ?2 \; s& P5 P, sidle小于70% IO压力就较大了,一般读取速度有较多的wait./ a, Z: J- H' ^( F' ~0 h, n
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高); j# M! P& G: b
另外 await 的参数也要多和 svctm 来参考。差的过高就一定有 IO 的问题。' M) N; Y! K1 p) H* s; T
avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高。也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的。
+ H% @5 a8 k# d: |. b, g , v- Q! z1 @5 V& O q4 r" j
! f$ c. b6 [9 {. b " _3 N6 c5 S! z: M4 p" ~
/ E9 p! ?( O4 o- O- Q % y& y% F8 ~$ F: N
' x7 h5 C1 C: y, \
另外还可以参考
, J. E# ^* o1 ?8 W. u% ~svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
8 F3 L1 m) x8 T队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。) `, c! j& H3 u0 O. [/ _
, J4 J: E2 _& N- }
0 e" m; V: \) p9 P/ _# f" U s j注:
; R) W! b3 K" a# T" S4 M% `iostat在内核2.4和内核2.6中数据来源不太一样,对于kernel 2.4, iostat 的数据的主要来源是 /proc/partitions;在2.6中,数据来源主要是/proc/diskstats和/sys/block/sd*/stat这两个文件6 q& `, A( l4 S, b7 v: I6 J" r
2 g1 X K% w- b: S. d
cat /proc/diskstats | grep sda
2 j1 b6 b$ |1 q8 o/ U 8 0 sda 8608337 4650455 896098215 9666364 21179395 77544435 867642604 170314316 0 11500968 179978332
1 |% q9 x6 A5 c' d+ M) a) \ 8 1 sda1 609547 46647 9993834 1477736 10316312 28618957 311482264 6715428 0 3775012 8192352$ y& F6 s, f% W: c/ D
8 2 sda2 279787 122 2239272 166044 24 85 872 920 0 166864 166940
) V: A* }# n( G: o3 P 8 3 sda3 7718898 4603552 883863197 8021508 10863059 48925393 556159468 163597968 0 8365140 171617840
) d n& H3 `* i
& F7 J& o2 N( k/ T/ d, C" G/ C9 @第1列 : 磁盘主设备号(major)( _7 ]. c- d$ ?. o: \
第2列 : 磁盘次设备号(minor). `3 G" A+ r8 Q, M* I0 q. \
第3列 : 磁盘的设备名(name)/ @6 ^. _$ E& V; r% S# Q
第4列 : 读请求总数(rio)9 |1 R1 a" _5 y. Y, w# Q& X
第5列 : 合并的读请求总数(rmerge)
! Y% p! [/ h9 M# \$ X7 L$ D; r! D- }第6列 : 读扇区总数(rsect)
/ g+ E$ Q: ]' ]& y* ]. w第7列 : 读数据花费的时间,单位是ms.(从__make_request到 end_that_request_last)(ruse)! v# Y: R5 X" ~* M9 Y, X
第8列 : 写请求总数(wio)* q4 @( [% n/ d) P1 r3 W
第9列 : 合并的写请求总数(wmerge)! J6 X& F" I, J2 z1 g f- u2 o
第10列 : 写扇区总数(wsect). d# ^, E' [$ m* t7 \* n
第11列 : 写数据花费的时间,单位是ms. (从__make_request到 end_that_request_last)(wuse)2 S8 I. n. I# I3 Q
第12列 : 现在正在进行的I/O数(running),等于I/O队列中请求数
$ v" s. k: V- l$ a; T第13列 : 系统真正花费在I/O上的时间,除去重复等待时间(aveq)
6 `, G- P+ T, B: _6 o6 `4 z第14列 : 系统在I/O上花费的时间(use)。 |
|