精华内容
下载资源
问答
  • LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以 动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文件中,注意:/sys/block/xvda ,这里xvda ...
    在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以
    动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文件中,
    注意:/sys/block/xvda ,这里 xvda 写的是你自己的硬盘名,因我的是vps所以是xvda,有可能的参数是 sda hda....等等。
    如果你不清楚可以,fdisk -l查看一下自己的物理磁盘名称。

    [root@leda03 public_html]# fdisk -l

    Disk /dev/xvdd: 117 MB, 117549056 bytes
    255 heads, 63 sectors/track, 14 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk /dev/xvdd doesn't contain a valid partition table
    Disk /dev/xvda: 21.4 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Device Boot      Start         End      Blocks   Id  System
    /dev/xvda1   *           1          13      104391   83  Linux
    /dev/xvda2              14        2610    20860402+  8e  Linux LVM
    Centos系统

    查看磁盘的默认请求队列:
    # cat /sys/block/xvda/queue/nr_requests
    128
    默认请求队列数为:128。
    现在我们来测试请求一个1G大小的文件:
    # time dd if=/dev/zero of=test bs=1M count=1000 
    1000+0 records in 
    1000+0 records out 
    1048576000 bytes (1.0 GB) copied, 60.2789 seconds, 17.4 MB/s 
    real    1m0.553s 

    user    0m0.043s 

    sys     0m6.363s


    由此看出,共花了1分55秒,现在把 nr_requests 的 128 改成 512 再试下:
    # echo 512 > /sys/block/xvda/queue/nr_requests 
    # cat /sys/block/hda/queue/nr_requests 
    512 

    # rm -f  test 
    # time dd if=/dev/zero of=test bs=1M count=1000 
    1000+0 records in 
    1000+0 records out 
    1048576000 bytes (1.0 GB) copied, 28.298 seconds, 37.1 MB/s 
    real    0m28.787s 
    user    0m0.040s 
    sys     0m5.982s
    同样大小的文件,改成 512 后只需要 28  秒钟,由此可以结论出,通过适当的调整
    nr_requests 参数可以大幅提升磁盘的吞吐量,缺点就是你要牺牲一定的内存。
    建议:通过适当的调整nr_requests 参数可以大幅提升磁盘的吞吐量,缺点就是你要牺牲一定的内存。但是这个牺牲的比例,目前 我还没有一个比较严格的数字,所以大家还是要慎重的去更改为好,最后先做一个压力测试,再去进行更改。当然如果你服务器的内存很足,就不必有此顾虑了。
    展开全文
  • 按照存储介质:分为机械磁盘和固态硬盘 按照存储接口:分为IDE SCSI SAS SATA FC,不同接口,不同设备名称,IDE设备hd前缀,SASISATA前缀sd,多块同类型磁盘,按照abc字母顺序编号 按照磁盘接入服务器后的使用方式的...

    按照存储介质:分为机械磁盘和固态硬盘
    按照存储接口:分为IDE SCSI SAS SATA FC,不同接口,不同设备名称,IDE设备hd前缀,SASISATA前缀sd,多块同类型磁盘,按照abc字母顺序编号

    按照磁盘接入服务器后的使用方式的不同,把磁盘分为不同架构
    独立磁盘使用:往往还会根据需要,划分为不同逻辑分区1,2
    多个磁盘组合成一个逻辑磁盘使用,RAID,容量性能不同分为raid0 raid1…
    把磁盘组合成一个网络存储集群,再通过NFS SMB ISCSI等网络存储协议,暴露给服务器使用
    其实在 Linux 中,磁盘实际上是作为一个块设备来管理的,也就是以块为单位读写数据,并且支持随机读写。每个块设备都会被赋予两个设备号,分别是主、次设备号。主设备号用在驱动程序中,用来区分设备类型;而次设备号则是用来给多个同类设备编号。
    VFS
    不同的文件系统
    通用块层

    通用块层,其实是处在文件系统和磁盘驱动中间的一个块设备抽象层。它主要有两个功能 。第一个功能跟虚拟文件系统的功能类似。向上,为文件系统和应用程序,提供访问块设备的标准接口;向下,**把各种异构的磁盘设备抽象为统一的块设备,并提供统一框架来管理这些设备的驱动程序。**第二个功能,通用块层还会给文件系统和应用程序发来的 I/O 请求排队,并通过重新排序、请求合并等方式,提高磁盘读写的效率。
    IO栈;由文件系统层、通用块层和设备层构成的 Linux 存储系统 I/O 栈。
    文件系统层,包括虚拟文件系统和其他各种文件系统的具体实现。它为上层的应用程序,提供标准的文件访问接口;对下会通过通用块层,来存储和管理磁盘数据。
    通用块层,包括块设备 I/O 队列和 I/O 调度器。它会对文件系统的 I/O 请求进行排队,再通过重新排序和请求合并,然后才要发送给下一级的设备层。
    设备层,包括存储设备和相应的驱动程序,负责最终物理设备的 I/O 操作。

    展开全文
  • 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

    展开全文
  • 磁盘io优化排查

    2020-09-09 14:20:14
    3)由于linux的swap机制。物理内存不够时会使用交换内存(可以调优参数),大量使用swap会带来磁盘I0进而导致CPU消耗 4)可能造成cpu瓶颈的问题:频繁执Perl,php,java程序生成动态web;数据库查询大量的

    哪些问题会导致磁盘缓慢?

    1)应用程序设计的缺陷和数据库查询的滥用、操作人员的失误、都有可能导致性能问题

    2)性能瓶颈可能是因为程序设计缺陷/内存太小/磁盘有损坏、性能差,但是最终都是CPU耗尽的结果(这就话很实用),系统负载极高,响应迟缓,甚至暂时失去响应。登陆不上机器。

    3)由于linux的swap机制。物理内存不够时会使用交换内存(可以调优参数),大量使用swap会带来磁盘I0进而导致CPU消耗

    4)可能造成cpu瓶颈的问题:频繁执Perl,php,java程序生成动态web;数据库查询大量的where子句、order by/group by排序……

    5)可能造成内存瓶颈问题:高并发用户访问、系统进程多(每个进程都会消耗内存,驻留内存),java内存泄露……

    6)可能造成磁盘IO瓶颈问题:生成cache文件,数据库频繁更新,或者查询大表……

    iostat命令

    iostat    

    iostat -x -d 1   #-d 表示显示 I/O 性能指标,-x 表示显示扩展统计(即所有 I/O 指标) 

    disk属性值说明:

    • rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
    • wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
    • r/s: 每秒完成的读 I/O 设备次数。即 rio/s
    • w/s: 每秒完成的写 I/O 设备次数。即 wio/s
    • rsec/s: 每秒读扇区数。即 rsect/s
    • wsec/s: 每秒写扇区数。即 wsect/s
    • rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
    • wkB/s: 每秒写K字节数。是 wsect/s 的一半。
    • avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
    • avgqu-sz: 平均I/O队列长度。
    • await: 平均每次设备I/O操作的等待时间 (毫秒)。
    • svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
    • %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

    备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。

    pidstat命令

    pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

    常用的参数:

    • -u:默认的参数,显示各个进程的cpu使用统计
    • -r:显示各个进程的内存使用统计
    • -d:显示各个进程的IO使用情况
    • -p:指定进程号
    • -w:显示每个进程的上下文切换情况
    • -t:显示选择任务的线程的统计信息外的额外信息
    • -T { TASK | CHILD | ALL }
      这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
      注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
    • -V:版本号
    • -h:在一行上显示了所有活动,这样其他程序可以容易解析。
    • -I:在SMP环境,表示任务的CPU使用率/内核数量
    • -l:显示命令名和所有参数

    pidstat -d 1

    报告IO统计显示以下信息:

    • PID:进程id
    • kB_rd/s:每秒从磁盘读取的KB
    • kB_wr/s:每秒写入磁盘KB
    • kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
    • COMMAND:task的命令名

    一个IO高的分析案例

    硬件排查

     MegaCli -pdlist -aAll | grep "Fir"  #磁盘都为在线状态

    MegaCli -pdlist -aAll | grep "Error"   #也不存在任何坏道

    应用程序排查

    1、使用 iostat -d -x 1 查看所有磁盘的io情况,发现 sdb的util 高达100% 接近饱和

    2、我们通过pidstat -d 1 查看是哪个进程占用IO高,发现为92571这个进程。 

    3、然后通过 strace 追踪Python 进程 92571 发现有很多等待的select语句

    排查事例二

    有16台数据库服务器,其中4台联想服务器普遍io较慢,其中一台io非常慢,其余12台浪潮服务器io正常

    16台服务器数据盘都为960G的SSD,以下是通过iostat查看io的性能,发现%util已接近100%

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

    sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

    sdb               0.00   234.00    0.00  640.00     0.00  3524.00    11.01     1.02    1.60    0.00    1.60   1.55  99.40

    疑点一:

    查看正常服务器的缓存策略为WB,进行写操作时,将数据写入RAID卡缓存,并直接返回,RAID卡控制器将在系统负载低或者Cache满了的情况下把数据写入硬盘。该设置会大大提升RAID卡写性能,绝大多数的情况下会降低系统IO负载。 数据的可靠性由RAID卡的BBU(Battery Backup Unit)进行保证。

    查看联想服务器的缓存策略为WT,数据写操作不使用缓存,数据直接写入磁盘。RAID卡写性能下降,在大多数情况下该设置会造成系统IO负载上升。

    怀疑可能由于缓存策略设置导致的io偏高,尝试修改缓存策略为wb,发现改了不起作用,要改成awb才行,awb就是不管数据安不安全,写到raid卡就算写成功了,但是为什么浪潮机器wb策略可以生效呢

    疑点二:

    难道是因为浪潮的raid卡带电池,而联想的机器不带电池导致的吗

    浪潮服务器可查看raid卡的电池状态

    联想服务器查看后发现没有电池

    通过对比发现是由于联想服务器不带raid电池,导致设置wb失败,而wt会导致io的增高,通过将缓存策略awb,io负载恢复了正常

    参考文档:

    https://www.cnblogs.com/summerxye/p/11114384.html

    https://blog.csdn.net/fanren224/article/details/88927523

    展开全文
  • 概述分享下关于linux磁盘I/0方面的优化,中间插一个rac方面的报错解决。文件系统优化** 动态调整请求队列数来提高效率,默认请求队列数为:128, 可配置512 **[root@bo queue]# cat /sys/block/sda/queue/nr_requests...
  • Linux磁盘IO监控[zz]

    2014-06-17 16:43:00
    它可以监控吞吐量、每秒 I/O 数、磁盘利用率、服务时间等信息,并且在发现异常时,发送告警信息给系统管理员,便于系统管理员进行调整数据布局等管理活动以达到优化系统总体性能的目的。 不同的操作系统监控磁盘 I/...
  • 概述分享下关于linux磁盘I/0方面的优化,中间插一个rac方面的报错解决。文件系统优化** 动态调整请求队列数来提高效率,默认请求队列数为:128, 可配置512 **[root@bo queue]# cat /sys/block/sda/queue/nr_requests...
  • linux系统IO优化

    2017-11-12 01:46:00
    Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据。 基本使用 $iostat -d -k 1 10 参数 -d 表示,显示设备(磁盘)使用...
  • Linux磁盘挂载解决扩容问题 增量数据的情况下,使得硬盘容量满载 解决磁盘IO的负载问题 现有的硬盘IO负载满载下,为了增加多个磁盘来分摊压力,如写入一个磁盘的目录下根据业务划分,写入挂载到不同磁盘的多个...
  • LINUX磁盘IO性能测试评估与优化

    千次阅读 2013-11-14 14:39:47
    LINUX磁盘IO性能测试评估:   一:dd 这不是一个专业的测试工具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使用来 对磁盘的读写速度作一个简单的评估.   概念描述: /dev/null:外号...
  • 系统优化是一项复杂、繁琐、长期的工作,优化前需要监测、采集、测试、评估,优化后也需要测试、采集、评估、监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上...
  • 今天听到看部门同事有遇到IO过高的问题 , 简单的查询了下 iostat命令: %user:CPU处在用户模式下的时间百分比。 %nice:CPU处在带NICE值的用户模式下的时间百分比。 %system:CPU处在系统模式下的时间百分比。 %io...
  • 系统优化是一项复杂、繁琐、长期的工作,优化前需要监测、采集、测试、评估,优化后也需要测试、采集、评估、监测,而且是一个长期和持续的过程,不是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的...
  • 内核相关参数 相关内核参数,有条件的话可以修改参数测试验证一下。 1、/proc/sys/vm/dirty_ratio 这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如...增大参数会使用更多系统内存用于磁盘写...
  • 本篇主要介绍磁盘IO子系统性能调优。1.调优简介1.1 调优思路CPU的Cache、内存和磁盘之间的访问速度差异很大,当CPU计算所需要的数据并没有及时加载到内存或Cache中时,CPU将会浪费很多时间等待磁盘的读取。计算机...
  • 如果为服务器订制一个专用文件系统,可以完全解决文件碎片的问题,将磁盘io的性能发挥至极限。对于我们的代理服务器,相当于把io性能提升到3-5倍。 在现有文件系统下进行优化linux内核和各个文件系
  • 概述分享下关于linux磁盘I/0方面的优化,中间插一个rac方面的报错解决。文件系统优化** 动态调整请求队列数来提高效率,默认请求队列数为:128, 可配置512 **[root@bo queue]# cat /sys/block/sda/queue/nr_requests...
  • 磁盘 磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和 固态磁盘。 第一类,机械磁盘,也称为硬盘驱动器(Hard Disk Driver),通常缩写为 HDD。机械磁 盘主要由盘片和读写磁头...
  • Linuxio磁盘调度策略

    2020-12-15 09:44:38
    他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。 在linux下面列出4种调度算法 CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq): 这是默认算法,对于通用服务器来说通常是...
  • linuxio磁盘调度策略

    2019-06-17 11:26:32
    I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。 在linux下面列出4种调度算法 CFQ (Completely Fair Queuing 完全公平的排队)...
  • Linux 4.0 IO协议栈框架图 I/O调度程序的总结: 1)当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.2)每个块设备都有它自己的队列.3)I/O调度程序负责维护这些队列的顺序...
  • linux IO 性能优化

    万次阅读 2013-03-13 09:29:31
    由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性。然而在特定应用下,这种配置往往在I/O性能方面不能达到最优。因此,如果应用对I/O性能要求较高,除了采用性能更高的...
  • 系统优化是一项复杂、繁琐、长期的工作,优化前需要监测、采集、测试、评估,优化后也需要测试、采集、评估、监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上...
  • Linux性能优化实战学习笔记:第二十三讲 一、索引节点和目录 1、索引节点 2、目录项 3、关系 为了帮助你理解目录项、索引节点以及文件数据的关系,我画了一张示意图,你可以对照这张图,来回忆刚刚讲过...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 251
精华内容 100
关键字:

linux磁盘io优化

linux 订阅