`

磁盘I/O性能监控命令

阅读更多

1) iostat命令

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

安装 iostat

iostat命令,如果没有使用命令,则需要进行安装。

安装命令

apt-get install sysstat

deb包下载地址 (Ubuntu Server 9.10)

http://tw.archive.ubuntu.com/ubuntu/pool/main/s/sysstat/sysstat_9.0.3-2ubuntu1_amd64.deb

targz包下载地址

http://pagesperso-orange.fr/sebastien.godard/sysstat-9.1.1.tar.gz

2) sar命令

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





2 .磁盘 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 %util

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

5) 服务时间( ServiceTime svctm

指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关, 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 宜直接存取原始磁盘分区( rawpartition)或者利用绕过文件系统缓存的 DIO 技术( direct IO);

6)利用内存读写带宽远比直接磁盘 I/O 操作性能优越的特点,将频繁访问的文件或数据置于内存中。





3 iostat 使用

[命令 :] iostat [-c|-d] [-k] [-t] [间隔描述 ] [检测次数 ]

数:

-c : 仅显示 cpu的状态

-d : 仅显示存储设备的状态,不可以和 -c一起使用

-k : 默认显示的是读入读出的 block信息,用 -k可以改成 KB大小来显示

-t: 显示日期

-p device | ALL : device为某个设备或者某个分区,如果使用 ALL,就表示要显示所有分区和设备的信息

1)基本使用

$iostat-d -k 1 10

说明: 参数 -d 表示,显示设备(磁盘)使用状态; -k 某些使用 block 为单位的列强制使用 Kilobytes 为单位; 1 10 表示,数据显示每隔 1 秒刷新一次,共显示 10 ,每一次的统计都是上一次的统计时间到这次的统计时间之间的统计数据。

2 -x 参数

使用 -x 参数我们可以获得更多统计信息。

$iostat -d -x -k 1 10

3 -c 参数

获取 cpu 部分状态值

$iostat -c 1 10

4 )常见用法

$iostat -d -k 1 10
#
查看 TPS 和吞吐量信息

$iostat -d -x -k 1 10
#
查看设备使用率( %util )、响应时间( await

$iostat -c 1 10
#
查看 cpu 状态

5)mpstat 命令

mpstat MultiProcessor Statistics 的缩写,是实时系统监控工具。其报告与 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 一起使用

当没有参数时, mpstat 则显示系统启动以后所有信息的平均值。有 interval 时,第一行的信息自系统启动以来的平均信息。

1 $mpstat

mpstat 不带参数时,输出为从系统启动以来的平均值。

2 $mpstat-P ALL 2 3

2 秒产生所有处理器的统计数据报告 ,统计三次,默认输出所有的处理器的统计数据;

3 $mpstat–P 0 2 3

2 秒产生 0 号处理器的统计数据报告,统计三次;

4 iostat 相关参数说明

参数

英文说明

说明

rrqm/s read request merge 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s write request merge 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s read 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s write 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s read section 每秒读扇区数。即   delta(rsect)/s
wsec/s write section 每秒写扇区数。即   delta(wsect)/s
rkB/s read kilo byte 每秒读 K字节数。是 rsect/s 的一半,因为每扇区大小为 512字节。 (需要计算 )
wkB/s write kilo byte 每秒写 K字节数。是 wsect/s 的一半。 (需要计算 )
avgrq-sz average request size 平均每次设备 I/O操作的数据大小 (扇区 ) delta(rsect+wsect)/delta(rio+wio)
avgqu-sz average queue size 平均 I/O队列长度。即 delta(aveq)/s/1000 (因为 aveq的单位为毫秒 )
await average wait 平均每次设备 I/O操作的等待时间 (毫秒 )。即   delta(ruse+wuse)/delta(rio+wio)
svctm service time 平均每次设备 I/O操作的服务时间 (毫秒 )。即   delta(use)/delta(rio+wio)
%util utilty 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为 use的单位为毫秒 )

 

如果 %util接近 100%,说明产生的 I/O请求太多, I/O系统已经满负荷,该磁盘可能存在瓶颈, idle小于 70% IO压力就较大了 ,一般读取速度有较多的 wait。同时可以结合 vmstat virtual memory status)查看 b参数 (等待资源的进程数 ) wa参数 (IO等待所占用的 CPU时间的百分比 ,高过 30% IO压力高 )

另外还可以参考 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人要快吧 ? 除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连 钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的 )

I/O 系统也和超市排队有很多类似之处 :

Ø r/s+w/s 类似于交款人的总数

Ø 平均队列长度 (avgqu-sz)类似于单位时间里平均排队人的个数

Ø 平均服务时间 (svctm)类似于收银员的收款速度

Ø 平均等待时间 (await)类似于平均每人的等待时间

Ø 平均 I/O数据 (avgrq-sz)类似于平均每人所买的东西多少

Ø I/O 操作率 (%util)类似于收款台前有人排队的时间比例。

参数输出的分析

#iostat -x 1

avg-cpu: %user %nice %sys %idle

16.24 0.00 4.31 79.44

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

sda 0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29

 

上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作 :

IO(io)/s=r/s( )+w/s( )=1.02+27.55 = 28.57 ( / ) 其中写操作占了主体 (w:r = 27:1)

平均每次设备 I/O操作只需要 5ms就可以完成,但每个 I/O请求却需要等上 78ms,为什么 ? 因为发出的 I/O 请求太多 (每秒钟约 29 ),假设这些请求是同时发出的,那么平均等待时间可以这样计算 :

平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + + 请求总数 -1) / 请求总数

应用到上面的例子 : 平均等待时间 = 5ms * (1+2+ +28)/29 = 70ms,和 iostat 给出的 78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。

每秒发出的 I/O 请求很多 ( 29 ),平均队列却不长 (只有 2 左右 ),这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。

一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说, 85.71% 的时间里 I/O 系统无事可做,所有 29 I/O 请求都在 142毫秒之内处理掉了。

delta(ruse+wuse)/delta(io)= await = 78.21 => delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 =2232.8,表明每秒内的 I/O请求总共需要等待 2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而 iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么 ?! 因为 iostat 中有 bug avgqu-sz 值应为 2.23,而不是 22.35

我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。

 

分享到:
评论

相关推荐

    Zabbix动态监控磁盘I/O

    在IT运维管理中,监控系统性能是至关重要的环节,其中磁盘I/O(输入/输出)监控尤为关键,因为它是衡量系统响应速度和数据处理能力的重要指标。Zabbix作为一个强大的开源监控解决方案,提供了一套全面的监控功能,...

    Unix,Linux 磁盘 IO 性能监控命令.docx

    在Unix和Linux操作系统中,磁盘I/O性能监控是系统管理员进行性能调优的关键环节。以下是一些关于磁盘I/O性能监控的重要知识点: 1. **IOPS (每秒I/O数)**:IOPS衡量了磁盘每秒钟完成的连续读写操作次数,尤其在处理...

    Linux中磁盘IO监控命令.pdf

    在Linux系统中,磁盘I/O性能监控是系统管理和优化的关键环节,因为它直接影响到系统的整体性能和稳定性。本文主要探讨了几个重要的磁盘I/O监控指标,并介绍了两个常用的监控命令:iostat和sar。 首先,理解磁盘I/O...

    性能测试,常用性能监控

    常用的磁盘监控命令包括 iostat、sar、pidstat、iotop、iolatency、blktrace、fio 等。iostat 命令可以显示磁盘的性能指标,如 IOPS、吞吐量、IOWAIT 等。sar 命令可以显示系统的性能指标,如 CPU 使用率、内存使用...

    UNIX常用性能监控命令.doc

    本文将详细介绍一些常用的性能监控命令,包括查看网络连接性、检查网络接口、监控主机路由、磁盘I/O性能以及AIX系统的内存监视。 1. **网络连通性检查**: 使用`ping`命令可以检查与目标主机的网络连通性。例如,`...

    易语言WMI磁盘IO性能监控

    在磁盘I/O性能监控中,WMI可以提供详细的磁盘读写速度、等待时间等关键性能指标。 首先,我们需要了解如何在易语言中调用WMI服务。这通常涉及到创建WMI连接、查询指定的WMI类(如Win32_PerfFormattedData_PerfDisk_...

    linux查看磁盘io的几种方法.docx

    在Linux操作系统中,监控磁盘I/O性能是诊断系统瓶颈和优化系统性能的关键步骤。本文将详细介绍三种常用的方法来查看Linux系统的磁盘I/O状况。 首先,我们可以使用`top`命令来初步判断磁盘I/O是否存在高负载。`top`...

    AIX_IO_Tuning

    本篇文章将深入探讨IBM AIX操作系统下的磁盘I/O性能调优方法,通过分析AIX I/O堆栈的工作原理、数据布局策略以及各种调优工具和技术,帮助读者理解如何优化磁盘I/O性能,从而提升系统的整体运行效率。 #### 二、...

    AIX常用的性能监控命令

    AIX常用的性能监控命令,机器性能优化主要从四个方面去考虑:CPU,内存,磁盘I/O,网络。

    磁盘io插件nagios

    磁盘I/O(Input/Output)是计算机系统中至关重要的组成部分,它关乎着系统的整体性能。在IT运维中,对磁盘I/O的监控显得尤为关键,因为任何I/O瓶颈都可能导致应用程序响应变慢,甚至影响整个系统的稳定运行。Nagios...

    Linux查看磁盘io开销的几种方法.docx

    通过top、vmstat和iostat等命令,可以有效地监控和诊断系统I/O性能问题,从而进行必要的调整和优化,确保系统的稳定运行。在日常运维中,定期检查这些指标可以帮助预防潜在的性能问题,提升系统整体效率。

    Understanding Disk IO

    操作系统通常提供了各种工具来帮助监控磁盘I/O,如Linux下的`iostat`命令,Windows下的资源监视器。通过定期检查磁盘的读写速率、队列长度、平均等待时间等指标,可以及时发现潜在的I/O问题,并采取相应措施进行优化...

    Linux系统运行时参数命令、网络、磁盘参数和日志监控.pdf

    本课程重点涵盖了Linux基础命令、系统性能监控,特别是CPU、内存、磁盘I/O以及网络性能的监控。通过学习这些知识,管理员可以有效地诊断和优化系统的运行状况。 1. **Linux基础命令和工具** - `grep`: 在文件中...

    linux下测试磁盘io性能工具

    在Linux操作系统中,测试磁盘I/O性能是评估系统性能的关键环节,这有助于优化系统配置、排查问题或对比不同硬件的效能。本文将详细介绍如何利用Linux下的工具进行磁盘I/O性能测试,以及如何编译和运行源码来实现图形...

    windows-Disk-IO.rar_disk io_windows 磁盘_磁盘

    - **RAID技术**: 利用多个磁盘组合提高I/O性能或数据冗余。 - **SSD缓存**: 使用SSD作为HDD的高速缓存,提升整体性能。 - **优化文件系统**: 根据工作负载选择合适的文件系统,如NTFS或ReFS。 7. **故障排查** ...

    Oracle-IO问题及性能调优.pdf

    I/O性能问题通常由磁盘I/O速度和效率所引起,它直接影响到数据库操作的响应时间,包括查询、更新、事务提交等。而性能调优则涉及到多种技术手段,目的是减少I/O等待时间,提高数据库操作的效率。 从文件提供的部分...

    Oracle数据库优化之数据库磁盘IO

    4. 分布I/O减少磁盘竞争:将数据文件和redo log文件分开,Striping表数据,分开表和索引,减少与oracle无关的磁盘I/O。 5. 避免动态空间管理:在创建表或回滚段的数据库实体时,确定动态扩展,分配分区,避免回滚段...

    搭建nagios监控服务器最佳实践

    - 通过 `vmstat -d` 命令可以报告一次磁盘I/O信息,这对于理解磁盘I/O性能至关重要。 ### 三、使用iostat命令监控CPU和磁盘I/O信息 iostat命令是sysstat软件包的一部分,它可以提供CPU统计信息和整个系统、适配器...

Global site tag (gtag.js) - Google Analytics