回忆之城
生命在于折腾
posts - 575,comments - 9,trackbacks - 0
磁盘 I/O 性能监控指标和调优方法 

在介绍磁盘 I/O 监控命令前,咱们需要相识磁盘 I/O 性能监控的指标,以及每个指标的所展现的磁盘某方面的性能。磁盘 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) 

磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和措置惩罚命令(如寻道)处于活动状况。磁盘利用率与资源争用程度成正比,与性能成反比。也就 是说磁盘利用率越高,资源争用就越严重,性能也就越差,响合时间就越长。一般来讲,要是磁盘利用率超过 70%,应用进程项将花费较长的时间等待 I/O 完成,因为绝大多数进程项在等待过程中将被梗阻或休眠。 

指标 5:服务时间(Service Time) 

指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关,CPU/ 内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。要是该值持续超过 20ms,一般可考虑会对上层应用孕育发生影响。 

指标 6:I/O 等待队列长度(Queue Length) 

指待措置惩罚的 I/O 请求的数目,要是 I/O 请求压力持续凌驾磁盘措置惩罚能力,该值将增加。要是单块磁盘的队列长度持续超过 2,一般认为该磁盘存在 I/O 性能问题。需要注意的是,要是该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的现实物理磁盘数目,以得到平均单块硬盘的 I/O 等待队列长度。 

指标 7:等待时间(Wait Time) 

指磁盘读或写操作等待执行的时间,即在队列中排队的时间。要是 I/O 请求持续凌驾磁盘措置惩罚能力,象征着来不及措置惩罚的 I/O 请求不得不在队列中等待较长时间。 

通过监控以上指标,并将这些指标数值与历史数据,经验数据以及磁盘标称值相比较,必要时联合 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 操作性能优越的特点,将频繁访问的文件或数据置于内存中。 

磁盘 I/O 性能监控命令简介 

Unix/Linux 提供了两个非常有用的用于磁盘 I/O 性能监控的命令:iostat 和 sar。 

iostat 命令主要通过观察物理磁盘的活动时间以及他们的平均传输速度,监控系统输入 / 输出设备负载。根据 iostat 命令产生的报告,用户可确定一个系统配置是否平衡,并据此在物理磁盘与适配器之间更好地平衡输入 / 输出负载。iostat 东西的主重要的条目的是通过监控磁盘的利用率,而探测到系统中的 I/O 瓶颈。不同操作系统命令格局输出格局略有不同,管理员可以通过查看用户手册来确定它的用法。 

sar 命令报告 CPU 的使用环境,I/O 以及其它系统行为。sar 命令可以收集,报告以及保存系统行为信息。以这种方式收集到的数据对于确定系统的时间周期特征和决定峰值使用时间是很有用的。但要注意的是,sar 命令自己运行特殊情况孕育发生相当数量的读写,因此最佳在没有工作量的环境下运行 sar 统计,看看 sar 对总的统计数码有多大的影响。 

AIX 环境下,iostat 和 sar 位于文件集 bos.acct 中,是基本系统 (Base Operating System) 的一部分,在缺省安装环境下无需进行任何配置或任何额外包安装。 

Linux 环境下,iostat 和 sar 包含在 sysstat 包中。sysstat 是 Linux 系统中的常用东西包。不同的 Linux 系统或不同的硬件平台,安装包名字和详细命令可能会有微小差异。清单1为一个在 RHEL5.3 上安装 sysstat 包的例子。 

iostat -d -x 10 3 

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util 

主要字段寄义如下: 

r/s 每秒读操作准。 

w/s 每秒写操作准。 

rsec/s 每秒从设备读取的扇区数量。 

wsec/s 每秒向设备写入的扇区数量。 

avgrq-sz I/O 请求的平均扇区数。 

avgqu-sz I/O 请求的平均队列长度。 

await I/O 请求的平均等待时间,单位为毫秒。 

svctm I/O 请求的平均服务时间,单位为毫秒。 

%util 措置惩罚 I/O 请求所占用的时间的百分比,即设备利用率。 

#sar -pd 10 3 

输出的主要字段寄义如下: 

DEV 正在监督的块设备 

tps 每秒钟物理设备的 I/O 传输总量 

rd_sec/s 每秒从设备读取的扇区数量 

wr_sec/s 每秒向设备写入的扇区数量 

avgrq-sz I/O 请求的平均扇区数 

avgqu-sz I/O 请求的平均队列长度 

await I/O 请求的平均等待时间,单位为毫秒 

svctm I/O 请求的平均服务时间,单位为毫秒 

%util I/O 请求所占用的时间的百分比,即设备利用率 
posted on 2013-05-21 14:05 回忆之城 阅读(273) 评论(0)  编辑 收藏 引用 所属分类: unix/linux
只有注册用户登录后才能发表评论。