好久之前就列出了性能学习的计划,xmind画了一大坨东东,只是一直没有真正实施起来,如今作个开篇吧。ios
iostat做为io性能分析的利器,早就想仔细看看了,列出经常使用参数说明:ide
参数说明:性能
-d 查看io设备的统计信息学习
-c 查看CPU相关的统计信息:spa
%user 用户态消耗的时间orm
%nice 用户进程空间中被调整过nice的进程消耗的时间队列
%sys 内核态消耗的时间进程
%idle 空闲实现文档
-x 查看io设备详细的统计信息:it
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的单位为毫秒)
做为硬件白痴我对avgqu-sz中的io队列的实现方式感兴趣,查了一些文档发现io队列应该是在OS层的东东,并非由硬盘自己来控制的,理论上硬盘操做都是串行的,若是作raid就至关因而在并行,可是应该是说io队列的消费速度快了,整个存储的传输效率和容错性都提高了。不知道对io队列的理解是否正确?有待进一步研究。
另外mac下如何查看nice值呢,top命令里没有说明如何显示,ps xl却是能够。
准备分析一个线上系统来验证一些想法,由于这个系统的IO压力仍是比较大的,并且突发性很强,因此,用这个系统来分析系统IO的性能是个不错的选择,下周开搞,在补充完这个学习笔记吧。