誉天Cisco/Linux认证社区服务器IO性能评估【监控命令+性能指标+iostat使用】1.磁盘I/O性能监控命令1)iostat命令iostat命令主要通过观察物理磁盘的活动时间以及他们的平均传输速度,监控系统输入/输出设备负载。根据iostat命令产生的报告,用户可确定一个系统配置是否平衡,并据此在物理磁盘与适配器之间更好地平衡输入/输出负载。iostat工具的主要目的是通过监控磁盘的利用率,而探测到系统中的I/O瓶颈。不同操作系统命令格式输出格式略有不同,管理员可以通过查看用户手册来确定它的用法。安装iostatiostat命令,如果没有使用命令,则需要进行安装。安装命令apt-getinstallsysstatdeb包下载地址(UbuntuServer9.10)包下载地址)sar命令sar命令报告CPU的使用情况,I/O以及其它系统行为。sar命令可以收集,报告以及保存系统行为信息。以这种方式收集到的数据对于确定系统的时间周期特征和决定峰值使用时间是很有用的。但要注意的是,sar命令自己运行时会产生相当数量的读写,因此最好在没有工作量的情况下运行sar统计,看看sar对总的统计数字有多大的影响。--------------------------------------------------------------------------------2.磁盘I/O性能指标在介绍磁盘I/O监控命令前,我们需要了解磁盘I/O性能监控的指标,以及每个指标的所揭示的武汉誉天.独家授权Cisco/RHCE培训认证社区磁盘某方面的性能。磁盘I/O性能监控的指标主要包括:1)每秒I/O数(IOPS或tps)对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘I/O,磁盘的IOPS就是每秒磁盘连续读次数和连续写次数之和。当传输小块不连续数据时,该指标有重要参考意义。2)吞吐量(Throughput)指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为Kbps,MB/s等。当传输大块不连续数据的数据,该指标有重要参考作用。3)平均I/O数据尺寸平均I/O数据尺寸为吞吐量除以I/O数目,该指标对揭示磁盘使用模式有重要意义。一般来说,如果平均I/O数据尺寸小于32K,可认为磁盘使用模式以随机存取为主;如果平均每次I/O数据尺寸大于32K,可认为磁盘使用模式以顺序存取为主。4)磁盘活动时间百分比(Utilization)%util磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和处理命令(如寻道)处于活动状态。磁盘利用率与资源争用程度成正比,与性能成反比。也就是说磁盘利用率越高,资源争用就越严重,性能也就越差,响应时间就越长。一般来说,如果磁盘利用率超过70%,应用进程将花费较长的时间等待I/O完成,因为绝大多数进程在等待过程中将被阻塞或休眠。5)服务时间(ServiceTime)svctm指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过20ms,一般可考虑会对上层应用产生影响。6)I/O等待队列长度(QueueLength)指待处理的I/O请求的数目,如果I/O请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过2,一般认为该磁盘存在I/O性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的I/O等待队列长度。7)等待时间(WaitTime)指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果I/O请求持续超出磁盘处理能力,意味着来不及处理的I/O请求不得不在队列中等待较长时间。通过监控以上指标,并将这些指标数值与历史数据,经验数据以及磁盘标称值对比,必要时结合CPU、内存、交换分区的使用状况,不难发现磁盘I/O潜在或已经出现的问题。但如果避免和解决这些问题呢?这就需要利用到磁盘武汉誉天.独家授权Cisco/RHCE培训认证社区性能优化方面的知识和技术。限于本文主题和篇幅,仅列出一些常用的优化方法供读者参考:(1)调整数据布局,尽量将I/O请求较合理的分配到所有物理磁盘中;(2)对于RAID磁盘阵列,尽量使应用程序I/O等于条带尺寸或者为条带尺寸的倍数。并选取合适的RAID方式,如RAID10,RAID5;(3)增大磁盘驱动程序的队列深度,但不要超过磁盘的处理能力,否则,部分I/O请求会因为丢失而重新发出,这将降低性能;(4)应用缓存技术减少应用存取磁盘的次数,缓存技术可应用在文件系统级别或者应用程序级别;(5)由于多数数据库中已包括经优化后的缓存技术,数据库I/O宜直接存取原始磁盘分区(rawpartition)或者利用绕过文件系统缓存的DIO技术(directIO);(6)利用内存读写带宽远比直接磁盘I/O操作性能优越的特点,将频繁访问的文件或数据置于内存中。--------------------------------------------------------------------------------3.iostat使用[命令:]iostat[-c|-d][-k][-t][间隔描述][检测次数]参数:-c:仅显示cpu的状态-d:仅显示存储设备的状态,不可以和-c一起使用-k:默认显示的是读入读出的block信息,用-k可以改成KB大小来显示-t:显示日期-pdevice|ALL:device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息1)基本使用武汉誉天.独家授权Cisco/RHCE培训认证社区说明:参数-d表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;110表示,数据显示每隔1秒刷新一次,共显示10次,每一次的统计都是上一次的统计时间到这次的统计时间之间的统计数据。2)-x参数使用-x参数我们可以获得更多统计信息。$iostat-d-x-k1103)-c参数获取cpu部分状态值$iostat-c1104)常见用法$iostat-d-k110#查看TPS和吞吐量信息$iostat-d-x-k110#查看设备使用率(%util)、响应时间(await)$iostat-c110#查看cpu状态5)mpstat命令mpstat是MultiProcessorStatistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。下面只介绍mpstat与CPU相关的参数,mpstat的语法如下:mpstat[-P{|ALL}][internal[count]]参数解释-P{|ALL}表示监控哪个CPU,cpu在[0,cpu个数-1]中取值internal相邻的两次采样的间隔时间count采样的次数,count只能和delay一起使用武汉誉天.独家授权Cisco/RHCE培训认证社区当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。(1)$mpstatmpstat不带参数时,输出为从系统启动以来的平均值。(2)$mpstat-PALL232秒产生所有处理器的统计数据报告,统计三次,默认输出所有的处理器的统计数据;(3)$mpstat–P0232秒产生0号处理器的统计数据报告,统计三次;4.iostat相关参数说明参数英文说明说明rrqm/sreadrequestmerge每秒进行merge的读操作数目。即delta(rmerge)/swrqm/swriterequestmerge每秒进行merge的写操作数目。即delta(wmerge)/sr/sread每秒完成的读I/O设备次数。即delta(rio)/sw/swrite每秒完成的写I/O设备次数。即delta(wio)/srsec/sreadsection每秒读扇区数。即delta(rsect)/swsec/swritesection每秒写扇区数。即delta(wsect)/srkB/sreadkilobyte每秒读K字节数。是rsect/s的一半,因为每扇区大小为512字节。(需要计算)wkB/swritekilobyte每秒写K字节数。是wsect/s的一半。(需要计算)avgrq-szaveragerequestsize平均每次设备I/O操作的数据大小(扇区)。delta(rsect+wsect)/delta(rio+wio)avgqu-szaveragequeuesize平均I/O队列长度。即delta(aveq)/s/1000(因为aveq的单位为毫秒)awaitaveragewait平均每次设备I/O操作的等待时间(毫秒)。即delta(ruse+wuse)/delta(rio+wio)svctmservicetime平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio)%utilutilty一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。即delta(use)/s/1000(因为use的单位为毫秒)如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈,idle小于70%IO压力就较大了,一般读取速度有较多的wait。同时可以结合vmstat(virtualmemorystatus)查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)武汉誉天.独家授权Cisco/RHCE培训认证社区另外还可以参考svctm,由于它一般要小于await(因为同时等待的请求的等待时间被重复计算了),svctm的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致svctm的增加。await的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式。如果svctm比较接近await,说明I/O几乎没有等待时间;如果await远大于svctm,说明I/O队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核elevator算法,优化应用,或者升级CPU。队列长度(avgqu-sz)也可作为衡量系统I/O负荷的指标,但由于avgqu-sz是按照单位时间的平均值,所以不能反映瞬间的I/O洪水。5.例子(I/O系统vs.超市排队)举一个例子,我们在超市排队checkout时,怎么决定该去哪个交款台呢?首当是看排的队人数,5个人总比20人要快吧?除了数人头,