EDA365电子论坛网
标题:
学习一下iostat的使用方法吧
[打印本页]
作者:
ulppknot
时间:
2020-3-18 09:56
标题:
学习一下iostat的使用方法吧
& p4 h$ j/ U3 c" M" H! B
安装:yum install sysstat
4 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 %idle
8 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 Z
Device: 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 _ S
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
: g L/ B _1 t/ U* D! R% i r" W. g/ z
wrqm/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)/s
4 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 p
wkB/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, G
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
4 x3 w- n: X7 z& V
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
. l( c5 Q) X2 y6 f5 J
svctm: 平均每次设备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: z
idle小于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 N
avgqu-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, e
9 {, ?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 179978332
6 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