Loading... # 系统性能分析与iostat的应用 在分析系统性能时候,top命令是永远的第一步,可以看整体负载,还可以看这一行 ``` %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ``` 如果%wa的值很高的话,那很有可能就是磁盘IO成为了瓶颈,那么这时候就要开始分析IO了。 # 磁盘分析工具:iostat ``` iostat -x -d 10 3 # 使用iostat工具,只显示设备信息,并显示更多的设备列,间隔10s,显示3次 Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util ``` - 主要字段含义如下: `r/s` 每秒读操作数 `w/s` 每秒写操作数 `rsec/s` 每秒从设备读取的扇区数量 `wsec/s` 每秒往设备写入的山区数量 `avgrq-sz I/O` 请求的平均扇区数 `avgqu-sz I/O` 请求的平均队列长度 `await I/O` 请求的平均等待时间(ms) `svctm I/O` 请求的平均服务时间(ms) `%util` 处理I/O请求所占用的时间百分比,即设备利用率 # 磁盘IO性能监控指标与调优方法 在介绍磁盘IO监控前,我们需要了解磁盘IO的性能指标,以及每个指标所揭示的磁盘某方面的性能。 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-d360c0aeefab57ed195b5c0eb59107ef20" aria-expanded="true"><div class="accordion-toggle"><span style="">指标1:每秒I/O数(IOPS或tps)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-d360c0aeefab57ed195b5c0eb59107ef20" class="collapse collapse-content"><p></p>对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。当传输小块不连续数据时,该指标有重要参考意义。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-0a77274269c28ea7df842ee0c77e055787" aria-expanded="true"><div class="accordion-toggle"><span style="">指标2:吞吐量(Throughput)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-0a77274269c28ea7df842ee0c77e055787" class="collapse collapse-content"><p></p>指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为 Kbps, MB/s 等。当传输大块不连续数据的数据,该指标有重要参考作用。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-21b2d324c049ed15a171cd364494d06c34" aria-expanded="true"><div class="accordion-toggle"><span style="">指标3:平均I/O数据尺寸</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-21b2d324c049ed15a171cd364494d06c34" class="collapse collapse-content"><p></p>指标 3:平均 I/O 数据尺寸平均 I/O 数据尺寸为吞吐量除以 I/O 数目,该指标对揭示磁盘使用模式有重要意义。一般来说,如果平均 I/O 数据尺寸小于 32K,可认为磁盘使用模式以随机存取为主;如果平均每次 I/O 数据尺寸大于 32K,可认为磁盘使用模式以顺序存取为主。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-5f62704482ff1adeb87c7036b113f00355" aria-expanded="true"><div class="accordion-toggle"><span style="">指标4:磁盘活动时间百分比(Utilization)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-5f62704482ff1adeb87c7036b113f00355" class="collapse collapse-content"><p></p>磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和处理命令(如寻道)处于活动状态。磁盘利用率与资源争用程度成正比,与性能成反比。也就 是说磁盘利用率越高,资源争用就越严重,性能也就越差,响应时间就越长。一般来说,如果磁盘利用率超过 70%,应用进程将花费较长的时间等待 I/O 完成,因为绝大多数进程在等待过程中将被阻塞或休眠。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-51eed1f8b0e258206b833052b2f4fddf53" aria-expanded="true"><div class="accordion-toggle"><span style="">指标5:服务时间(Service Time)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-51eed1f8b0e258206b833052b2f4fddf53" class="collapse collapse-content"><p></p>指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关,CPU/ 内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过 20ms,一般可考虑会对上层应用产生影响。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-0205ccabcd59d2b0f92779110c83d38484" aria-expanded="true"><div class="accordion-toggle"><span style="">指标6:I/O 等待队列长度(Queue Length)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-0205ccabcd59d2b0f92779110c83d38484" class="collapse collapse-content"><p></p>指待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过 2,一般认为该磁盘存在 I/O 性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的 I/O 等待队列长度。<p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-f3963caf6673646edb92f4a3e35a783837" aria-expanded="true"><div class="accordion-toggle"><span style="">指标7:等待时间(Wait Time)</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-f3963caf6673646edb92f4a3e35a783837" class="collapse collapse-content"><p></p>指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果 I/O 请求持续超出磁盘处理能力,意味着来不及处理的 I/O 请求不得不在队列中等待较长时间。<p></p></div></div></div> 通过监控以上指标,并将这些指标数值与历史数据,经验数据以及磁盘标称值对比,必要时结合 CPU、内存、交换分区的使用状况,不难发现磁盘 I/O 潜在或已经出现的问题。但如果避免和解决这些问题呢?这就需要利用到磁盘 I/O 性能优化方面的知识和技术。限于本文主题和篇幅,仅列出一些常用的优化方法供读者参考: 1. 调整数据布局,尽量将 I/O 请求较合理的分配到所有物理磁盘中。 2. 对于 RAID 磁盘阵列,尽量使应用程序 I/O 等于条带尺寸或者为条带尺寸的倍数。并选取合适的 RAID 方式,如 RAID10,RAID5。 3. 增大磁盘驱动程序的队列深度,但不要超过磁盘的处理能力,否则,部分 I/O 请求会因为丢失而重新发出,这将降低性能。 4. 应用缓存技术减少应用存取磁盘的次数,缓存技术可应用在文件系统级别或者应用程序级别。 5. 由于多数数据库中已包括经优化后的缓存技术,数据库 I/O 宜直接存取原始磁盘分区(raw partition)或者利用绕过文件系统缓存的 DIO 技术(direct IO) 6. 利用内存读写带宽远比直接磁盘 I/O 操作性能优越的特点,将频繁访问的文件或数据置于内存中。 Last modification:November 24, 2021 © Allow specification reprint Like 0 If you think my article is useful to you, please feel free to appreciate