精华内容
下载资源
问答
  • linux磁盘IO

    千次阅读 2011-09-27 08:40:29
    磁盘 I/O 监控是 Unix/Linux 系统管理中一个非常重要的组成部分。它可以监控吞吐量、每秒 I/O 数、磁盘利用率、服务时间等信息,并且在发现异常时,发送告警信息给系统管理员,便于系统管理员进行调整数据布局等管理...
     
    

    磁盘 I/O 监控是 Unix/Linux 系统管理中一个非常重要的组成部分。它可以监控吞吐量、每秒 I/O 数、磁盘利用率、服务时间等信息,并且在发现异常时,发送告警信息给系统管理员,便于系统管理员进行调整数据布局等管理活动以达到优化系统总体性能的目的。

    不同的操作系统监控磁盘 I/O 的命令可能略有不同。本文将介绍 Unix/Linux 操作系统磁盘 I/O 管理命令及相关信息,并讲述 Unix/Linux 操作系统上磁盘 I/O 管理监控的自动化脚本实现。

    Unix/Linux 磁盘 I/O 性能监控命令

    磁盘 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 性能优化方面的知识和技术。限于本文主题和篇幅,仅列出一些常用的优化方法供读者参考:

    调整数据布局,尽量将 I/O 请求较合理的分配到所有物理磁盘中。对于 RAID 磁盘阵列,尽量使应用程序 I/O 等于条带尺寸或者为条带尺寸的倍数。并选取合适的 RAID 方式,如 RAID10,RAID5。增大磁盘驱动程序的队列深度,但不要超过磁盘的处理能力,否则,部分 I/O 请求会因为丢失而重新发出,这将降低性能。应用缓存技术减少应用存取磁盘的次数,缓存技术可应用在文件系统级别或者应用程序级别。由于多数数据库中已包括经优化后的缓存技术,数据库 I/O 宜直接存取原始磁盘分区(raw partition)或者利用绕过文件系统缓存的 DIO 技术(direct IO)利用内存读写带宽远比直接磁盘 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 包的例子。


    清单1:在 RHEL5.3 上安装 sysstat 包
    # rpm -ivh sysstat-7.0.2-3.el5.ppc.rpm warning: sysstat-7.0.2-3.el5.ppc.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... #################################### [100%] 1:sysstat #################################### [100%]

    在 AIX 系统上监控磁盘 I/O 状况

    清单 2 与清单 3 是在一个负载较重的 AIX 节点上运行 iostat 和 sar 的执行结果,每个命令时间间隔设定为 10 秒,总共执行3次。


    清单 2:在 AIX6.1 系统上利用 iostat 查看磁盘 I/O 负载
    # iostat -d 10 3 System configuration: lcpu=32 drives=226 paths=2 vdisks=0 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 51.6 1582.8 25.6 2208 13632 hdisk2 14.6 6958.5 7.1 0 69637 hdisk3 94.2 40013.8 73.3 9795 390643 hdisk1 61.2 2096.9 33.9 4176 16844 hdisk2 20.1 9424.0 10.0 32 94438 hdisk3 97.2 39928.3 73.8 25112 375144 hdisk1 63.5 2098.6 34.7 4216 16796 hdisk2 27.1 13549.5 13.6 8352 127308 hdisk3 98.4 40263.8 81.2 27665 375464

    主要字段含义如下:

    % tm_act 表示物理磁盘处于活动状态的时间百分比,即磁盘利用率。

    Kbps 表示以 KB 每秒为单位的传输(读或写)到驱动器的数据量。

    Tps 表示每秒物理磁盘的 I/O 次数。

    Kb_read 在设定时间间隔内读取的数据量,以 KB 为单位。

    Kb_wrtn 在设定时间间隔内写入的数据量,以 KB 为单位。


    清单 3: 在 AIX6.1 系统上使用 sar – d 报告磁盘 I/O 信息
    # sar -d 10 3 AIX node001 1 6 00CAA4CC4C00 08/19/09 System configuration: lcpu=32 drives=226 mode=Capped 04:34:43 device %busy avque r+w/s Kbs/s avwait avserv 04:34:53 hdisk1 52 0.0 26 1645 0.0 28.3 hdisk2 18 0.0 8 8614 0.4 73.5 hdisk3 92 0.1 72 38773 28.5 105.1 04:35:03 hdisk1 62 0.0 34 2133 0.0 30.7 hdisk2 20 0.0 10 9855 0.4 84.2 hdisk3 98 0.1 74 39975 24.4 115.7 04:35:13 hdisk1 62 0.0 33 2019 0.0 32.5 hdisk2 23 0.0 11 11898 0.4 67.4 hdisk3 97 0.0 80 40287 13.7 97.4 Average hdisk1 58 0.0 31 1932 0.0 30.5 hdisk2 20 0.0 9 10122 0.4 75.0 hdisk3 95 0.1 75 39678 22.2 106.1

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

    %busy 处理 I/O 请求所占用的时间,以百分比表示。

    avque 在指定的时间间隔没有完成的请求数量的平均值。

    r+w/s 每秒 I/O 读写总数。

    Kbs/s 每秒字节数,以 KB 为单位。

    avwait 传送请求等待队列空闲的平均时间,以毫秒为单位。

    avserv 完成 I/O 请求所需平均时间,以毫秒为单位。

    本例显示 hdisk1 的利用率居中,每秒 I/O 数居中,但吞吐量最小;hdisk2 的利用率最小,每秒 I/O 数最小,但吞吐量比 hdisk1 高;hdisk3 I/O 利用率最大,每秒 I/O 数和吞吐量也最大,I/O 平均等待时间最长,服务时间也最长。hdisk1 的平均 I/O 尺寸为 1932/31= 62 KB;hdisk2 的平均 I/O 尺寸为 10122/9= 1125 KB;hdisk3 的平均 I/O 尺寸为 39678/75= 529 KB。从中可见,小块随机存取对每秒 I/O 数影响较大,大块顺序读取对吞吐量影响较大。hdisk3 利用率超过 70% 警戒线,虽然其平均 I/O 尺寸比 hdisk2 小约一半,但服务时间却比 hdisk2 增加约 30%,同时等待时间也较长,应该对其采取管理措施。

    在 Linux 系统上监控磁盘 I/O 状况

    清单 4 与清单 5 是在一个负载较轻的 Linux 节点上 iostat 和 sar 的执行结果,时间间隔设定为 10 秒,总共执行 3 次。


    清单 4:在 RHEL5.3 系统上利用 iostat 查看磁盘 I/O 负载
    # iostat -d -x 10 3 Linux 2.6.18-128.el5 (node002.ibm.com) 08/19/2009 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.10 22.12 0.14 2.06 12.98 286.60 136.58 0.19 87.17 3.76 0.82 sda1 0.00 0.00 0.00 0.00 0.00 0.00 75.06 0.00 3.89 3.14 0.00 sda2 0.00 0.00 0.00 0.00 0.02 0.00 53.56 0.00 13.28 11.67 0.00 sda3 0.09 22.12 0.14 2.06 12.94 286.60 136.59 0.19 87.19 3.76 0.82 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 6.40 0.00 1.20 0.00 91.20 76.00 0.01 7.25 5.08 0.61 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda3 0.00 6.40 0.00 1.20 0.00 91.20 76.00 0.01 7.25 5.08 0.61 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 3.30 0.00 5.40 0.00 100.00 18.52 0.45 83.24 3.63 1.96 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda3 0.00 3.30 0.00 5.40 0.00 100.00 18.52 0.45 83.24 3.63 1.96

    主要字段含义如下:

    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 请求所占用的时间的百分比,即设备利用率。


    清单 5:在 RHEL5.3 系统上利用 sar 报告磁盘 I/O 信息
    #sar -pd 10 3 Linux 2.6.18-128.el5 (node002.ibm.com) 08/19/2009 04:13:48 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:13:58 AM sda 1.20 0.00 91.11 76.00 0.01 7.25 5.08 0.61 04:13:58 AM sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:13:58 AM sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:13:58 AM sda3 1.20 0.00 91.11 76.00 0.01 7.25 5.08 0.61 04:13:58 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:14:08 AM sda 5.41 0.00 100.10 18.52 0.45 83.24 3.63 1.96 04:14:08 AM sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:14:08 AM sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:14:08 AM sda3 5.41 0.00 100.10 18.52 0.45 83.24 3.63 1.96 04:14:08 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:14:18 AM sda 0.60 0.00 74.47 124.00 0.00 7.50 6.33 0.38 04:14:18 AM sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:14:18 AM sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:14:18 AM sda3 0.60 0.00 74.47 124.00 0.00 7.50 6.33 0.38 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: sda 2.40 0.00 88.56 36.89 0.15 64.26 4.10 0.98 Average: sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: sda3 2.40 0.00 88.56 36.89 0.15 64.26 4.10 0.98

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

    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 请求所占用的时间的百分比,即设备利用率

    本例可见磁盘 sda 的 I/O 操作较少,仅分区 sda3 存在 I/O 操作,且利用率低于 1%,平均 I/O 尺寸为 0.15 * 512 = 77B,I/O 操作以小块写入为主。本例中未发现异常输出,不需对磁盘采取管理措施。

    回页首

    Unix/Linux 系统磁盘 I/O 性能监控自动化脚本示例

    前文介绍了 AIX 与 Linux 磁盘 I/O 监控的手段,本节将结合实例介绍磁盘 I/O 监控的自动化脚本的设计和实现。

    设计思路

    1 . 监控指标

    前文介绍了多个监控指标,比如吞吐量,每秒 I/O 数,平均单次 I/O 响应时间,磁盘利用率等,用户可以根据自身系统和应用的特点选取监控指标。下文将以磁盘利用率为例进行监控脚本的设计。

    2 .监控手段

    对于 AIX, 命令“iostat -d”的输出字段“% tm_act”反映磁盘利用率;对于 Linux, 命令“iostat -d -x”的输出字段“%util”反映磁盘利用率。监控的频次可以通过“iostat”命令本身的参数指定。

    3. 告警机制

    一般来说,如果磁盘使用率长时间达到 75% 或 80%, 通常会视为磁盘较忙,一般需进行调整磁盘布局,调整应用使用分配等管理活动,如果磁盘使用率偶尔较高,只需要继续监视即可。因此告警既不能对于偶发现象频繁告警,也不能放过持续时间较长的现象,本例的告警机制设定为“在一定时间间隔内的一定比例的监控记录超出设定的磁盘利用率门限值即告警”

    4 .日志

    要保留磁盘 I/O,分析活动,告警信息等原始信息,便于以后进行问题分析,定位。

    磁盘 I/O 分析和告警自动脚本

    结合上文设计思路,笔者开发了磁盘 I/O 分析和告警脚本 I/OAnalyzer.sh, 我们的脚本在 RHEL 5.3、SLES 11、AIX 5.3 和 AIX 6.1 上测试通过。

    脚本 IOAnalyzer.sh 的第一部分先进行了初始化,检验并处理输入参数,对未输入的参数指定默认值。


    清单 6. IOAnalyzer.sh 脚本初始化部分
    #!/bin/sh # ================================================================ # Script Name: IOAnalyzer.sh # Desciption: To analyze output of 'iostat -d', send an alert to admin # if disk utilization counter reach defined threshold # Date: May 19, 2009 #================================================================ # ----------------------------------------------------------------- # Function definitions... 定义函数 #---------------------------------------------------------------- function usage { echo "" echo "usage: IOAnalyzer.sh -i inIostatFile [ -l outLogFile ] \ [ -a outAlertFile ] [ -u dishUtil ] [ -r rateGEUtil ]" echo "" echo "For example: IOAnalyzer.sh -i /tmp/iostat.out -l /tmp/logFile \ -a /tmp/aletFile -u 80 -r 70" echo "For AIX, please run 'iostat -d [ <interval> [ <count> ] \ to create inIostatFile" echo "For Linux, please run 'iostat -d -x [ <interval> [ <count> ] \ to create inIostatFile" exit 1 } # ---------------------------------------------------------------- # Process command-line arguments 命令行参数处理 # ---------------------------------------------------------------- while getopts :i:l:a:u:r: opt do case "$opt" in i) inIostatFile="$OPTARG";; l) outLogFile="$OPTARG";; a) outAlertFile="$OPTARG";; u) diskUtil="$OPTARG";; r) rateGEUtil="$OPTARG";; \?) usage;; esac done #---------------------------------------------------------------- # Input validation 输入验证 #---------------------------------------------------------------- if [ ! -f "$inIostatFile" ] then echo "error: invalid Augument inIostatFile in OPTION -i " usage exit 1 fi #--------------------------------------------------------------- # Set values, if unset 设置变量 # ---------------------------------------------------------------- outLogFile=${outLogFile:-${inIostatFile}.log} outAlertFile=${outAlertFile:-${inIostatFile}.alert} diskUtil=${diskUtil:-'80'} rateGEUtil=${rateGEUtil:-'60'}

    接下来, IOAnalyzer.sh 脚本查询日志,通过计算起止行的办法定位 IO 输出文件的待分析文本。


    清单 7. IOAnalyzer.sh 脚本定位 I/O 输出文件待分析部分
    # ---------------------------------------------------------------- # Identify the lines to be analyzed between StartLine and Endline # 定位日志中待分析文本 # ---------------------------------------------------------------- if [ ! -f "$outLogFile" ] || [ ! tail -1 "$outLogFile"|grep 'ENDLINE'] then StartLineNum=1; else CompletedLine=`tail -1 "$outLogFile" | grep 'ENDLINE' | \ awk '{print $4}'|cut -d: -f2` StartLineNum=`expr 1 + $CompletedLine` fi eval "sed -n '${StartLineNum},\$p' $inIostatFile" > ${inIostatFile}.tail LineCount=`cat ${inIostatFile}.tail|wc -l|awk '{print $1}'` EndLineNum=`expr $LineCount + $StartLineNum`

    清单 7 中的脚本实现了按行分析上文定位的 iostat 输出,如果某行磁盘利用率小于先前定义的门限值,则在行尾标记“OK”,如果某行磁盘利用率大于等于先前定义的门限值,则在行尾标记“Alarm”。并且脚本中对于 AIX 和 Linux 输出格式和磁盘命名的不同作了相应处理。


    清单 8. IOAnalyzer.sh 按行分析 iostat 输出
    # ---------------------------------------------------------------- # Analyze 'iostat' output, append "Alarm" or "OK" at the end of each# line # ---------------------------------------------------------------- OS=`uname` case "$OS" in AIX) diskUtilLabel="% tm_act" diskUtilCol=2 diskPrefix="hdisk" ;; Linux) diskUtilLabel="%util" diskUtilCol=14 diskPrefix="hd|sd" ;; *) echo "not support $OS operating system!" exit 1; ;; esac eval "cat ${inIostatFile}.tail | egrep '${diskPrefix}' \ | awk '{if ( \$${diskUtilCol} * 100 < ${diskUtil} ) \ {\$20 = \"OK\"; print \$1\"\t\"\$${diskUtilCol}\"\t\"\$20 } \ else {\$20 = \"Alarm\"; print \$1\"\t\"\$${diskUtilCol}\"\t\"\$20 } }'" \ > ${outLogFile}.tmp

    下文脚本给出一个告警触发的例子,如果过高的磁盘利用率计数占总分析行数的比率达到或超出预定的比率,脚本会给 root 用户发一封告警邮件。


    清单 9. IOAnalyzer.sh 触发告警
    # ---------------------------------------------------------------- # Send admin an alert if disk utilization counter reach defined # threshold # ---------------------------------------------------------------- Alert="NO" for DISK in `cut -f1 ${outLogFile}.tmp | sort -u` do numAlarm=`cat ${outLogFile}.tmp | grep "^$DISK.*Alarm$" |wc -l` numRecord=`cat ${outLogFile}.tmp | grep "^$DISK" |wc -l` rateAlarm=`expr $numAlarm \* 100 / $numRecord` if [ $rateAlarm -ge $rateGEUtil ];then echo "DISK:${DISK} TIME:`date +%Y%m%d%H%M` \ RATE:${rateAlarm} THRESHOLD:${rateGEUtil}" >> ${outAlertFile}.tmp Alert="YES" fi done if [ $Alert= "YES" ];then cat ${outAlertFile}.tmp >> ${outAlertFile} mail -s "DISK IO Alert" root@localhost< ${outAlertFile}.tmp fi

    最后,脚本将分析活动归档,便于下次分析时定位起始行;另外,分析过程中产生的文件将被删除。


    清单 10. IOAnalyzer.sh 记录分析活动日志和清除临时文件
    #---------------------------------------------------------------- # Clearup temporary files and logging # ---------------------------------------------------------------- echo "IOSTATFILE:${inIostatFile} TIME:`date +%Y%m%d%H%M` \ STARTLINE:${StartLineNum} ENDLINE:${EndLineNum} ALERT:${Alert}" \ >> ${outLogFile} rm -f ${outLogFile}.tmp rm -f ${outAlertFile}.tmp rm -f ${inIostatFile}.tail exit 0

    脚本使用示例

    以下为 IOAnalyzer.sh 脚本在 AIX 上使用示例

    1 .后台执行 iostat, 并将输出重定向到文件中


    清单 11. 后台执行 iostat
    # nohup iostat -d 5 > /root/iostat.out & (对于 Linux,运行 iostat -d – x 5 > /root/iostat.out &)

    2 .编辑 crontab 文件,每 10 分钟运行一次 IOAnalyzer.sh 脚本,-u 70 –r 80,表示在距上次运行 IOAnalyzer.sh 至今产生的某磁盘的监控记录中的 80% 使用率达到或超过 70%,即发出告警。告警日志和分析日志可通过 IOAnalyzer.sh 的 –l –a 参数指定,本例保持默认值,即在 iostat 的输出文件所在目录产生 iostat.out.log 和 iostat.out.alert 文件。


    清单 12. 编辑 crontab
    # crontab – e 0,10,20,30,40,50 * * * * /root/IOAnalyzer.sh -i /root /iostat.out -u 70 \ -r 80>/tmp/iostat.out 2>&1

    3 .用户收到告警邮件,需要进一步查询历史记录时,可查看日志文件


    清单 13. 查看日志文件
    # cat /root/iostat.out.log | more IOSTATFILE: /root/iostat.out TIME:200905200255 STARTLINE:7220 ENDLINE:7580 ALARM:YES IOSTATFILE: /root/iostat.out TIME:200905200300 STARTLINE:7581 ENDLINE:7940 ALARM:YES IOSTATFILE:/root/iostat.out TIME:200905200305 STARTLINE:7941 ENDLINE:8300 ALARM:YES [AIXn01]> cat /root/iostat.out.alert | more DISK:hdisk4 TIME:200905200250 RATE:84 THRESHOLD:70 DISK:hdisk5 TIME:200905200250 RATE:84 THRESHOLD:70 DISK:hdisk6 TIME:200905200250 RATE:84 THRESHOLD:70

    回页首

    小结

    本文介绍了 Unix/Linux 上的磁盘 I/O 管理命令并通过一个自动化监控脚本详细介绍了如何实现磁盘 I/O 的自动化监控管理。磁盘 I/O 的自动化监控能帮助系统管理员及时发现磁盘 I/O 的异常问题,管理员可通过采取相应的措施使得问题得以消除和缓解。


    参考资料

    学习

    磁盘管理篇(上) :本文主要讲述如何通过脚本来实现自动化监控磁盘空间状态并及时通知系统管理员的方法。 

    OpenSSH 组织的官方网站 :从这里可以找到 openSSH 相关的资料。 

    Expect.pm 的使用手册:介绍了 Expect 的 Perl 语言接口。 

    EXPECT 的主页:从这里可以找到几乎所有关于 EXPECT 的资料,包括文档、FAQ、Wiki 和有用的链接。 

    Expect 超出预期 :一种不为人知但功能强大的流行工具,文章介绍了 Expect 的基本功能。 

    IBM Publication: 《命令参考大全,卷 5:s - u》:AIX 6.1 信息中心文档,系统管理类。 

    有关 Perl 信息及其相关资源,请查看  Perl.com。 

    Programming Perl Third Edition(Larry Wall、Tom Christiansen 和 Jon Orwant 著;O'Reilly & Associates,2000)是当今最好的 Perl 指南,现在已经更新到 5.005 和 5.6.0。 

    Perl Cookbook(Tom Christiansen 和 Nathan Torkington 著;O'Reilly & Associates,1998)是关于所有 Perl 问题的权威性入门书籍。 

    AIX and Unix 专区 :developerWorks 的“AIX and Unix 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 Unix 技能。

    AIX and Unix 新手入门 :访问“AIX and Unix 新手入门”页面可了解更多关于 AIX 和 Unix 的内容。

    AIX and Unix 专题汇总 :AIX and Unix 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。

    developerWorks 技术活动 和 网络广播 :随时关注 developerWorks 技术活动和网络广播。 


    转自:http://hi.baidu.com/%B5%DA%B6%FE%CA%AE%CE%E5%B4%CE%D7%A2%B2%E1/blog/item/9ce53ceff0dd4dcb2e2e2127.html

    展开全文
  • Linux磁盘情况查询

    2019-01-23 12:03:24
    Linux的使用中,我们会经常的查看我们的磁盘使用情况等,下面记录一些常用的磁盘情况查询操作! 一、基本语法 语法:df -h 或df -lh 实例:查询系统磁盘的整体使用情况 二、查询指定目录磁盘占用情况 基本...

    在Linux的使用中,我们会经常的查看我们的磁盘使用情况等,下面记录一些常用的磁盘情况查询操作!

    一、基本语法

    语法:df -h  或df -lh

    实例:查询系统磁盘的整体使用情况

    二、查询指定目录磁盘占用情况

    基本语法:du -h /指定目录

    说明:

    • 该命令是查询指定目录的磁盘占用情况,默认是查看当前目录
    • -s :指定目录占用大小汇总
    • -h :带计量单位
    • -a :含文件
    • --max-depth= n  :n代表子目录的深度
    • -e :列出明细的同事,增加汇总值

    实例:查询 /opt 目录的磁盘占用情况,深度为1

    三、工作常用指令

    1.统计/home 文件夹下的文件的个数

    命令介绍:

    • ls -l  /home :列出home目录下的所有文件
    • | :为管道符,将左边的内容作为右边指定的输入
    • grep "^-" :搜索以-开头的文件
    • wc - l : 计数

    2.统计/home 文件夹下目录的个数

    3.统计/home 文件夹下文件的个数,包括子文件夹里面的

    4.统计文件夹下目录的个数,包括子文件夹里的

    5.以树状显示目录结构

    直接输入tree命令即可查看目录的树状结构

    说明:如果没有安装tree,直接使用yum install tree命令安装即可。

     

    展开全文
  • Unix/Linux 磁盘 I/O 性能监控命令iostat

    千次阅读 2012-10-06 11:59:22
    磁盘 I/O 性能监控指标和调优方法  在介绍磁盘 I/O 监控命令前,咱们需要相识磁盘 I/O 性能监控的指标,以及每个指标的所展现的磁盘某方面的性能。磁盘 I/O 性能监控的指标主要包括:  指标 1:每秒 I/O ...

    磁盘 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 请求所占用的时间的百分比,即设备利用率 

    展开全文
  • Unix/Linux 磁盘 I/O 性能监控命令

    千次阅读 2013-09-26 09:06:37
    Unix/Linux 磁盘 I/O 性能监控命令磁盘 I/O 性能监控指标和调优方法在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能。磁盘 I/O 性能监控的指标主要包括:...
    
     

    Unix/Linux 磁盘 I/O 性能监控命令

    磁盘 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 请求所占用的时间的百分比,即设备利用率
    Unix/Linux 系统磁盘 I/O 性能监控自动化脚本示例

    前文介绍了 AIX 与 Linux 磁盘 I/O 监控的手段,本节将结合实例介绍磁盘 I/O 监控的自动化脚本的设计和实现。

    设计思路

    1 . 监控指标

    前文介绍了多个监控指标,比如吞吐量,每秒 I/O 数,平均单次 I/O 响应时间,磁盘利用率等,用户可以根据自身系统和应用的特点选取监控指标。下文将以磁盘利用率为例进行监控脚本的设计。

    2 .监控手段

    对于 AIX, 命令“iostat -d”的输出字段“% tm_act”反映磁盘利用率;对于 Linux, 命令“iostat -d -x”的输出字段“%util”反映磁盘利用率。监控的频次可以通过“iostat”命令本身的参数指定。

    3. 告警机制

    一般来说,如果磁盘使用率长时间达到 75% 或 80%, 通常会视为磁盘较忙,一般需进行调整磁盘布局,调整应用使用分配等管理活动,如果磁盘使用率偶尔较高,只需要继续监视即可。因此告警既不能对于偶发现象频繁告警,也不能放过持续时间较长的现象,本例的告警机制设定为“在一定时间间隔内的一定比例的监控记录超出设定的磁盘利用率门限值即告警”

    4 .日志

    要保留磁盘 I/O,分析活动,告警信息等原始信息,便于以后进行问题分析,定位。

    磁盘 I/O 分析和告警自动脚本

    结合上文设计思路,笔者开发了磁盘 I/O 分析和告警脚本 I/OAnalyzer.sh, 我们的脚本在 RHEL 5.3、SLES 11、AIX 5.3 和 AIX 6.1 上测试通过。

    脚本 IOAnalyzer.sh 的第一部分先进行了初始化,检验并处理输入参数,对未输入的参数指定默认值。

    清单 6. IOAnalyzer.sh 脚本初始化部分

    01. #!/bin/sh
    02.  # ================================================================
    03.  # Script Name:  IOAnalyzer.sh
    04.  # Desciption:   To analyze output of 'iostat -d', send an alert to admin
    05.  #              if disk utilization counter reach defined threshold
    06.  # Date:         May 19, 2009
    07.  #================================================================
    08.  
    09. # -----------------------------------------------------------------
    10.  # Function definitions...                                定义函数
    11.  #----------------------------------------------------------------
    12.  
    13. function usage {
    14.  echo ""
    15.  echo "usage: IOAnalyzer.sh -i inIostatFile [ -l outLogFile ] \
    16.  [ -a outAlertFile ] [ -u dishUtil ] [ -r rateGEUtil ]"
    17.  echo ""
    18.  echo "For example: IOAnalyzer.sh -i /tmp/iostat.out -l /tmp/logFile \
    19.  -a /tmp/aletFile -u 80 -r 70"
    20.  echo "For AIX, please run 'iostat -d [ <interval> [ <count> ] \
    21.  to create inIostatFile"
    22.  echo "For Linux, please run 'iostat -d -x [ <interval> [ <count> ] \
    23.  to create inIostatFile"
    24.  exit 1
    25.  }
    26.  
    27. # ----------------------------------------------------------------
    28.  # Process command-line arguments                          命令行参数处理
    29.  # ----------------------------------------------------------------
    30.  while getopts :i:l:a:u:r: opt
    31.  do
    32.  case "$opt" in
    33.  i) inIostatFile="$OPTARG";;
    34.  l) outLogFile="$OPTARG";;
    35.  a) outAlertFile="$OPTARG";;
    36.  u) diskUtil="$OPTARG";;
    37.  r) rateGEUtil="$OPTARG";;
    38.  \?) usage;;
    39.  esac
    40.  done
    41.  
    42. #----------------------------------------------------------------
    43.  # Input validation                                       输入验证
    44.  #----------------------------------------------------------------
    45.  
    46. if [ ! -f "$inIostatFile" ]
    47.  then
    48.  echo "error: invalid Augument inIostatFile in OPTION -i "
    49.  usage
    50.  exit 1
    51.  fi
    52.  #---------------------------------------------------------------
    53.  
    54. # Set values, if unset                                   设置变量
    55.  # ----------------------------------------------------------------
    56.  
    57. outLogFile=${outLogFile:-${inIostatFile}.log}
    58.  outAlertFile=${outAlertFile:-${inIostatFile}.alert}
    59.  diskUtil=${diskUtil:-'80'}
    60.  rateGEUtil=${rateGEUtil:-'60'}

    接下来, IOAnalyzer.sh 脚本查询日志,通过计算起止行的办法定位 IO 输出文件的待分析文本。

    清单 7. IOAnalyzer.sh 脚本定位 I/O 输出文件待分析部分

    01. # ----------------------------------------------------------------
    02.  # Identify the lines to be analyzed between StartLine and Endline
    03.  # 定位日志中待分析文本
    04.  
    05. # ----------------------------------------------------------------
    06.  
    07. if [ ! -f "$outLogFile" ] || [ ! tail -1 "$outLogFile"|grep 'ENDLINE']
    08.  then
    09.  StartLineNum=1;
    10.  else
    11.  CompletedLine=`tail -1 "$outLogFile" grep 'ENDLINE' | \
    12.  awk '{print $4}'|cut -d: -f2`
    13.  StartLineNum=`expr 1 + $CompletedLine`
    14.  fi
    15.  
    16. eval "sed -n '${StartLineNum},\$p' $inIostatFile" > ${inIostatFile}.tail
    17.  
    18. LineCount=`cat ${inIostatFile}.tail|wc -l|awk '{print $1}'`
    19.  EndLineNum=`expr $LineCount + $StartLineNum`

    清单 7 中的脚本实现了按行分析上文定位的 iostat 输出,如果某行磁盘利用率小于先前定义的门限值,则在行尾标记“OK”,如果某行磁盘利用率大于等于先前定义的门限值,则在行尾标记“Alarm”。并且脚本中对于 AIX 和 Linux 输出格式和磁盘命名的不同作了相应处理。

    清单 8. IOAnalyzer.sh 按行分析 iostat 输出

    01. # ----------------------------------------------------------------
    02.  # Analyze 'iostat' output, append "Alarm" or "OK" at the end of each# line
    03.  
    04. # ----------------------------------------------------------------
    05.  OS=`uname`
    06.  case "$OS" in
    07.  AIX)
    08.  diskUtilLabel="% tm_act"
    09.  diskUtilCol=2
    10.  diskPrefix="hdisk"
    11.  ;;
    12.  Linux)
    13.  diskUtilLabel="%util"
    14.  diskUtilCol=14
    15.  diskPrefix="hd|sd"
    16.  ;;
    17.  *)      echo "not support $OS operating system!"
    18.  exit 1;
    19.  ;;
    20.  esac
    21.  
    22. eval "cat ${inIostatFile}.tail egrep '${diskPrefix}' \
    23.  awk '{if ( \$${diskUtilCol} * 100 < ${diskUtil} ) \
    24.  {\$20 = \"OK\"; print \$1\"\t\"\$${diskUtilCol}\"\t\"\$20 } \
    25.  else {\$20 = \"Alarm\"; print \$1\"\t\"\$${diskUtilCol}\"\t\"\$20 } }'" \
    26.  > ${outLogFile}.tmp

    下文脚本给出一个告警触发的例子,如果过高的磁盘利用率计数占总分析行数的比率达到或超出预定的比率,脚本会给 root 用户发一封告警邮件。

    清单 9. IOAnalyzer.sh 触发告警

    01. # ----------------------------------------------------------------
    02.  # Send admin an alert if disk utilization counter reach defined
    03.  # threshold
    04.  
    05. # ----------------------------------------------------------------
    06.  Alert="NO"
    07.  for DISK in `cut -f1  ${outLogFile}.tmp | sort -u`
    08.  do
    09.  numAlarm=`cat ${outLogFile}.tmp | grep "^$DISK.*Alarm$" |wc -l`
    10.  numRecord=`cat ${outLogFile}.tmp | grep "^$DISK" |wc -l`
    11.  rateAlarm=`expr $numAlarm \* 100 / $numRecord`
    12.  if [ $rateAlarm -ge $rateGEUtil ];then
    13.  echo "DISK:${DISK}      TIME:`date +%Y%m%d%H%M`  \
    14.  RATE:${rateAlarm}      THRESHOLD:${rateGEUtil}" >> ${outAlertFile}.tmp
    15.  Alert="YES"
    16.  fi
    17.  done
    18.  if [ $Alert= "YES" ];then
    19.  cat ${outAlertFile}.tmp >> ${outAlertFile}
    20.  mail -s "DISK IO Alert"  root@localhost< ${outAlertFile}.tmp
    21.  fi

    最后,脚本将分析活动归档,便于下次分析时定位起始行;另外,分析过程中产生的文件将被删除。

    清单 10. IOAnalyzer.sh 记录分析活动日志和清除临时文件

    01. #----------------------------------------------------------------
    02.  # Clearup temporary files and logging
    03.  # ----------------------------------------------------------------
    04.  
    05. echo "IOSTATFILE:${inIostatFile}        TIME:`date +%Y%m%d%H%M`  \
    06.  STARTLINE:${StartLineNum}       ENDLINE:${EndLineNum}   ALERT:${Alert}" \
    07.  
    08. >> ${outLogFile}
    09.  
    10. rm -f ${outLogFile}.tmp
    11.  rm -f ${outAlertFile}.tmp
    12.  rm -f ${inIostatFile}.tail
    13.  
    14. exit 0

    脚本使用示例

    以下为 IOAnalyzer.sh 脚本在 AIX 上使用示例

    1 .后台执行 iostat, 并将输出重定向到文件中

    清单 11. 后台执行 iostat

    # nohup iostat -d 5 > /root/iostat.out &
    (对于 Linux,运行 iostat -d – x 5 > /root/iostat.out &)

    2 .编辑 crontab 文件,每 10 分钟运行一次 IOAnalyzer.sh 脚本,-u 70 –r 80,表示在距上次运行 IOAnalyzer.sh 至今产生的某磁盘的监控记录中的 80% 使用率达到或超过 70%,即发出告警。告警日志和分析日志可通过 IOAnalyzer.sh 的 –l –a 参数指定,本例保持默认值,即在 iostat 的输出文件所在目录产生 iostat.out.log 和 iostat.out.alert 文件。

    清单 12. 编辑 crontab

    # crontab – e
    0,10,20,30,40,50 * * * * /root/IOAnalyzer.sh -i /root /iostat.out -u 70 \
    -r 80>/tmp/iostat.out 2>&1

    3 .用户收到告警邮件,需要进一步查询历史记录时,可查看日志文件

    清单 13. 查看日志文件

    # cat /root/iostat.out.log | more
    IOSTATFILE: /root/iostat.out TIME:200905200255 STARTLINE:7220 ENDLINE:7580  ALARM:YES
    IOSTATFILE: /root/iostat.out  TIME:200905200300  STARTLINE:7581 ENDLINE:7940 ALARM:YES
    IOSTATFILE:/root/iostat.out TIME:200905200305  STARTLINE:7941 ENDLINE:8300 ALARM:YES

    [AIXn01]> cat /root/iostat.out.alert | more
    DISK:hdisk4     TIME:200905200250         RATE:84      THRESHOLD:70
    DISK:hdisk5     TIME:200905200250         RATE:84      THRESHOLD:70
    DISK:hdisk6     TIME:200905200250         RATE:84      THRESHOLD:70


    <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
    阅读(141) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~
    评论热议
    展开全文
  • Linux系统中需要监控磁盘各分区的使用情况,避免由于各种突发情况,造成磁盘空间被消耗殆尽的情况,例如某个分区被Oracle的归档日志耗尽,导致后续的日志文件无法归档,这时ORACLE数据库就会出现错误。监控磁盘空间...
  • 超全总结,Linux常用磁盘命令、文件命令!
  • Linux系统基础操作命令-磁盘管理(四) pwd命令 显示当前的工作目录 cd命令 切换当前工作目录至目标目录 cd … 上一级目录 cd - 切换到最近一次工作目录 cd ~ 切换到当前目录的家目录 cd 切换到当前目录的家目录 df...
  • mount 挂载文件系统 umount 卸载文件系统 fsck 检查并修复Linux文件系统 dd 转换或复制文件 dumpe2fs 导出ext2/ext3/ext...parted 磁盘分区命令,没有磁盘大小限制,常用于2TB以下磁盘分区 mkfs 格式化创建Linux文件...
  • Linux Shell脚本攻略》 笔记 第八章:磁盘、日志管理 1、显示给定文件夹下的文件的磁盘适用情况 [root@localhost program_test]# du -a -h ./ 320K ./output.tar 96K ./reslt_yang.txt 4.0K ./curr_dir.md5 ...
  • iostat 命令是 I/O statistics(输入/输出统计)的缩写,用来报告系统的 CPU 统计信息和块设备及其分区的 IO 统计信息。iostat 是 sysstat 工具集的一个工具,在 Ubuntu 系统中默认是不带 iostat 命令的,需要自行安装...
  • 因为最近在进行系统稳定性...2、使用iostat工具监控磁盘使用情况,每10分钟采集一次,将数据按天存放在文件中 iostat工具 1、现在linux环境安装iostat的依赖包 yum install sysstat 2、执行命令 iostat -t 600 -x...
  • linux使用FIO测试磁盘的iops

    千次阅读 2015-08-28 11:29:43
    FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。 ...
  • Linux操作系统基础

    万次阅读 多人点赞 2018-05-27 12:16:53
    Linux简介 Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机 Linux介绍 Linux出现...
  • 查看Linux系统内存、CPU、磁盘使用率和详细信息 一、查看内存占用 1、free # free -m 以MB为单位显示内存使用情况 # free -h 以GB为单位显示内存使用情况 # free -t 以总和的形式查询内存的使用信息 ...
  • linux系统中cpu、内存、磁盘IO异常定位的方式进行梳理总结如下: 1、先记录下基本的cpu信息查询方式: # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超...
  • Linux

    2019-08-02 11:11:50
    第1章 Linuxr入门 1.1 Linux介绍 Linux怎么读【李纽克斯,利尼克斯,里纳克斯】 Linux是一款操作系统,免费,开源,高效,稳定,处理高并发非常强悍,现在很多的企业级项目都部署到Linux/unix服务器运行。 Linux...
  • 常用Linux操作系统的发展历史

    千次阅读 2020-06-29 23:54:58
    Linux操作系统常见Linux操作系统的发展历史UbuntuUbuntu常用命令CentOSreadhat 常见Linux操作系统的发展历史 Ubuntu Ubuntu 的版本更新周期 桌面版和服务器版本更新的时间是 6 个月 Ubuntu 的版本支持时间 ...
  • linux性能监控(cpu 内存 磁盘IO 网络)

    万次阅读 2013-01-14 10:20:16
    ------------------------------------------《Linux 系统和网络性能监测》读书笔记-------------------------------------------  《Linux 系统和网络性能监测》  读
  • 风险:磁盘IO性能突然下降(使用更快的磁盘设备) 如何避免无法连接数据库的情况: 1、减少从服务器的数量 2、进行分级缓存 3、避免使用“ select * ”进行查询 4、分离业务网络和服务端网络 还有什么会影响...
  • 最新 Linux 命令总结 大全

    千次阅读 多人点赞 2021-07-02 19:35:43
    今天,带来一篇 Linux 命令总结的非常全的文章,也是我们平时工作中使用率非常高的操作命令,命令有点多,建议小伙伴们可以先收藏后阅读。 目录1. 基本命令2. 关机3. 文件和目录4. 文件搜索5. 挂载一个文件系统6. ...
  • 文章目录linux 系统命令总结大全关于作者**作者介绍**0.IP 地址相关命令0.1 ifconfig 命令 ---显示网络设备信息02.ip 命令 ---显示与操作路由03.dhclient 命令 --- 动态获取或释放IP地址04.nmtui ---界面修改网卡...
  • Linux学习手册大全

    万次阅读 多人点赞 2021-07-17 12:40:41
    Linux大全1、虚拟机安装2、虚拟机网络连接方式3、安装vmtools4、虚拟机目录4.1、目录含义4.2、Linux颜色含义5、远程登录软件6、编辑命令7、用户管理8、CentOS7找回root密码9、文件目录指令pwd指令ls指令cd指令mkdir...
  • Linux RHEL 7系统命令统计加实例说明

    千次阅读 2018-10-11 12:15:19
    • :undolist – 你的撤销历史。 • ctrl + r: 重做最后的改动。 • U: 取消当前行中所有的改动。 文件加解密 • vim -x file: 开始编辑一个加密的文件。 • :X – 为当前文件设置密码。 • :set key= – 去除...
  • Linux面试题

    万次阅读 多人点赞 2019-06-26 17:11:37
    另外,面试官也可能会问,你熟悉 Linux 么?你平时使用哪些 Linux 命令。酱紫的连环炮~ 当然,建议重点看下 「性能相关」 小节。 目录相关 find 命令 《Linux 命令大全 —— find 命令》 查找指定文件名的文件(不...
  • Linux配置

    千次阅读 2015-12-31 09:01:57
    第3章 对Linux系统管理员的建议... 1 第4章 安装Linux操作系统... 2 第5章 初步认识Linux. 5 第6章 Linux系统的远程登陆... ...第9章 Linux磁盘管理... 45 第10章 文本编辑工具vim.. 70 第11章 文档的压缩
  • linux

    千次阅读 2010-08-25 19:36:00
    linux百科名片Linux是一类Unix计算机操作系统的统称。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。严格来讲,Linux这个词本身只表示Linux内核,但在实际上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,590
精华内容 9,036
关键字:

linux磁盘历史统计

linux 订阅