关于Linux性能监控之IO篇

合集下载

linux iops测试方法

linux iops测试方法

linux iops测试方法摘要:1.Linux IOPS 测试概述2.常用的Linux IOPS 测试工具3.测试前的准备工作4.具体测试步骤及解读结果5.提高Linux IOPS 的方法6.总结正文:**一、Linux IOPS 测试概述**Linux IOPS(每秒输入/输出操作次数)测试是衡量系统性能的重要指标,尤其在存储设备和存储系统方面。

通过对Linux 系统的IOPS 进行测试,可以了解存储设备的读写性能以及整个系统的响应速度。

本文将介绍Linux IOPS 测试的方法和工具,以及提高IOPS 的方法。

**二、常用的Linux IOPS 测试工具**1.fio:高性能的I/O 测试工具,支持多种存储设备和工作模式。

2.iozone:文件系统I/O 性能测试工具,支持多种文件大小和存储设备。

3.bonnie++:针对文件系统性能的测试工具,可以生成并测试随机数据。

4.hdparm:用于测试硬盘性能的命令行工具,支持SCSI 和IDE 设备。

**三、测试前的准备工作**1.确保测试系统与被测试设备在同一台服务器上。

2.停止不必要的系统服务和应用程序,降低测试过程中的干扰。

3.调整系统内核参数,如io_submit_threads 和io_thread_pool_size,以提高IOPS 性能。

4.确认被测试设备的分区信息和文件系统类型。

**四、具体测试步骤及解读结果**1.选择合适的测试工具,如fio。

2.编写测试脚本,设置测试参数,如文件大小、读写比例、测试时间等。

3.执行测试脚本,收集测试结果。

4.分析结果,关注IOPS、吞吐量、延迟等指标。

**五、提高Linux IOPS 的方法**1.优化文件系统参数,如启用日志记录和写入缓存。

2.调整系统内核参数,如增加内存大小和I/O 调度算法。

3.升级存储设备和控制器,提高硬件性能。

4.使用SSD 硬盘,提高IOPS 性能。

**六、总结**Linux IOPS 测试是评估系统性能的重要手段。

Linux性能监控之IO篇

Linux性能监控之IO篇

Linux性能监控之IO篇在某些具体的情况下,I/O会成为系统的瓶颈。

我们会用到工具top,vmstat,iostat,sar等来进行检测。

每一个工具的输出都从不同的方面反映除系统的性能情况。

情况1:同一时间进行大量的I/O操作在这种情况时我们会发现CPU的wa时间百分比会上升,证明系统的idle时间大部分都是在等待I/O操作。

#vmstat1procs-----memory--------swap---io------system--cpu----r b swpd free buff cache si so bi bo in cs us sy id wa32055452923617390200093520258087712024057230538889232174083600148600264289542325052220518569212174292800126880263684872325052从这个输出我们可以看到CPU有50%的时间都在等待I/O操作,我们还可以看到系统的bi值很大,证明系统有大量的I/O请求将磁盘内容读入内存。

没有很好的工具能看到到底是哪个进程在进行I/O读写。

但我们可以通过top命令的输出来猜测#top-d1top-19:45:07up1:40,3users,load average: 6.36, 5.87, 4.40Tasks:119total,3running,116sleeping,0stopped,0zombieCpu(s): 5.9%us,87.1%sy,0.0%ni,0.0%id, 5.9%wa, 1.0%hi,0.0%siMem:2075672k total,2022668k used,53004k free,7156k buffersSwap:2031608k total,132k used,2031476k free,1709372k cachedPID USER PR NI VIRT RES SHR S%CPU%MEM TIME+nFLT COMMAND3069root5-10450m303m280m S61.515.010:56.684562vmware-vmx3016root5-10447m300m280m S21.814.812:22.833978vmware-vmx3494root5-10402m255m251m S 3.012.61:08.653829vmware-vmx3624root5-10401m256m251m S 1.012.60:29.923747vmware-vmx将top的输出通过faults进行排序。

Linux进程实时IO监控iotop命令详解

Linux进程实时IO监控iotop命令详解

Linux进程实时IO监控iotop命令详解介绍Linux下的IO统计⼯具如iostat, nmon等⼤多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使⽤IO的就⽐较⿇烦. iotop 是⼀个⽤来监视磁盘 I/O 使⽤状况的 top 类⼯具。

iotop 具有与 top 相似的 UI,其中包括 PID、⽤户、I/O、进程等相关信息。

实例直接运⾏就好iotop输出如下Total DISK READ: 6.01 M/s | Total DISK WRITE: 3.85 K/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 20074 be/4 hadoop 6.01 M/s 0.00 B/s 0.00 % 4.54 % java -Dproc_datanode -Xmx8192m -server org.apache.hadoop.hdfs.server.datanode.DataNode 6371 be/4 hadoop 0.00 B/s 3.25 M/s 0.00 % 0.00 % java -Dproc_datanode -Xmx8192m -server org.apache.hadoop.hdfs.server.datanode.DataNode 8497 be/4 hadoop 0.00 B/s 3.67 M/s 0.00 % 0.00 % java -Dproc_datanode -Xmx8192m -server org.apache.hadoop.hdfs.server.datanode.DataNode1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]通过输出结果,我们可以清楚地知晓是什么程序在读写磁盘,速度以及命令⾏,pid 等信息。

Linux中IO监控命令的使用分析

Linux中IO监控命令的使用分析

Linux中IO监控命令的使⽤分析⼀篇不错的有关linux io监控命令的介绍和使⽤。

1、系统级IO监控iostatiostat -xdm 1 # 个⼈习惯%util 代表磁盘繁忙程度。

100% 表⽰磁盘繁忙, 0%表⽰磁盘空闲。

但是注意,磁盘繁忙不代表磁盘(带宽)利⽤率⾼argrq-sz 提交给驱动层的IO请求⼤⼩,⼀般不⼩于4K,不⼤于max(readahead_kb, max_sectors_kb)可⽤于判断当前的IO模式,⼀般情况下,尤其是磁盘繁忙时, 越⼤代表顺序,越⼩代表随机svctm ⼀次IO请求的服务时间,对于单块盘,完全随机读时,基本在7ms左右,既寻道+旋转延迟时间注: 各统计量之间关系=======================================%util = ( r/s + w/s) * svctm / 1000 # 队列长度 = 到达率 * 平均服务时间avgrq-sz = ( rMB/s + wMB/s) * 2048 / (r/s + w/s) # 2048 为 1M / 512=======================================总结:iostat 统计的是通⽤块层经过合并(rrqm/s, wrqm/s)后,直接向设备提交的IO数据,可以反映系统整体的IO状况,但是有以下2个缺点:1 距离业务层⽐较遥远,跟代码中的write,read不对应(由于系统预读 + pagecache + IO调度算法等因素, 也很难对应)2 是系统级,没办法精确到进程,⽐如只能告诉你现在磁盘很忙,但是没办法告诉你是谁在忙,在忙什么?2、进程级IO监控iotop 和 pidstat (仅rhel6u系列)iotop 顾名思义, io版的toppidstat 顾名思义, 统计进程(pid)的stat,进程的stat⾃然包括进程的IO状况这两个命令,都可以按进程统计IO状况,因此可以回答你以下⼆个问题1.1. 当前系统哪些进程在占⽤IO,百分⽐是多少?2. 占⽤IO的进程是在读?还是在写?读写量是多少?pidstat 参数很多,仅给出⼏个个⼈习惯pidstat -d 1 #只显⽰IOpidstat -u -r -d -t 1 # -d IO 信息,# -r 缺页及内存信息# -u CPU使⽤率# -t 以线程为统计单位# 1 1秒统计⼀次iotop, 很简单,直接敲命令。

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

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

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 请求压力持续超出磁盘处理能力,该值将增加。

Linux IO调度深入分析---cmt

Linux IO调度深入分析---cmt

linux io调度深入分析一)I/O调度程序的总结:1)当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.2)每个块设备都有它自己的队列.3)I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作.4)内核必须首先确定队列中一共有多少个请求,然后才开始进行调度.二)I/O调度的4种算法1)CFQ(完全公平排队I/O调度程序)特点:在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择.CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中.CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择.CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级.工作原理:CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,各队列之间的调度使用时间片来调度,以此来保证每个进程都能被很好的分配到I/O带宽.I/O调度器每次执行一个进程的4次请求.2)NOOP(电梯式调度程序)特点:在Linux2.4或更早的版本的调度程序,那时只有这一种I/O调度算法.NOOP实现了一个简单的FIFO队列,它像电梯的工作主法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质.NOOP倾向饿死读而利于写.NOOP对于闪存设备,RAM,嵌入式系统是最好的选择.电梯算法饿死读请求的解释:因为写请求比读请求更容易.写请求通过文件系统cache,不需要等一次写完成,就可以开始下一次写操作,写请求通过合并,堆积到I/O队列中.读请求需要等到它前面所有的读操作完成,才能进行下一次读操作.在读操作之间有几毫秒时间,而写请求在这之间就到来,饿死了后面的读请求.3)Deadline(截止时间调度程序)特点:通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序. Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象. Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.4)AS(预料I/O调度程序)特点:本质上与Deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其它I/O请求进行调度.可以从应用程序中预订一个新的读请求,改进读操作的执行,但以一些写操作为代价.它会在每个6ms中插入新的I/O操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.AS适合于写入较多的环境,比如文件服务器AS对数据库环境表现很差.三)I/O调度方法的查看与设置1)查看当前系统的I/O调度方法:[root@test1 tmp]# cat /sys/block/sda/queue/schedulernoop anticipatory deadline [cfq]2)临地更改I/O调度方法:例如:想更改到noop电梯调度算法:echo noop > /sys/block/sda/queue/scheduler3)想永久的更改I/O调度方法:修改内核引导参数,加入elevator=调度程序名[root@test1 tmp]# vi /boot/grub/menu.lst更改到如下内容:kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet重启之后,查看调度方法:[root@test1 ~]# cat /sys/block/sda/queue/schedulernoop anticipatory [deadline] cfq已经是deadline了四)I/O调度程序的测试本次测试分为只读,只写,读写同时进行.分别对单个文件600MB,每次读写2M,共读写300次.1)测试磁盘读:[root@test1 tmp]# echo deadline > /sys/block/sda/queue/scheduler [root@test1 tmp]# time dd if=/dev/sda1 f=/dev/null bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.81189 seconds, 92.4 MB/sreal 0m6.833suser 0m0.001ssys 0m4.556s[root@test1 tmp]# echo noop > /sys/block/sda/queue/scheduler[root@test1 tmp]# time dd if=/dev/sda1 f=/dev/null bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.61902 seconds, 95.1 MB/sreal 0m6.645suser 0m0.002ssys 0m4.540s[root@test1 tmp]# echo anticipatory > /sys/block/sda/queue/scheduler [root@test1 tmp]# time dd if=/dev/sda1 f=/dev/null bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 8.00389 seconds, 78.6 MB/sreal 0m8.021suser 0m0.002ssys 0m4.586s[root@test1 tmp]# echo cfq > /sys/block/sda/queue/scheduler[root@test1 tmp]# time dd if=/dev/sda1 f=/dev/null bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 29.8 seconds, 21.1 MB/sreal 0m29.826suser 0m0.002ssys 0m28.606s结果:第一 noop:用了6.61902秒,速度为95.1MB/s第二 deadline:用了6.81189秒,速度为92.4MB/s第三 anticipatory:用了8.00389秒,速度为78.6MB/s第四 cfq:用了29.8秒,速度为21.1MB/s2)测试写磁盘:[root@test1 tmp]# echo cfq > /sys/block/sda/queue/scheduler[root@test1 tmp]# time dd if=/dev/zero f=/tmp/test bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.93058 seconds, 90.8 MB/sreal 0m7.002suser 0m0.001ssys 0m3.525s[root@test1 tmp]# echo anticipatory > /sys/block/sda/queue/scheduler [root@test1 tmp]# time dd if=/dev/zero f=/tmp/test bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.79441 seconds, 92.6 MB/sreal 0m6.964suser 0m0.003ssys 0m3.489s[root@test1 tmp]# echo noop > /sys/block/sda/queue/scheduler[root@test1 tmp]# time dd if=/dev/zero f=/tmp/test bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 9.49418 seconds, 66.3 MB/sreal 0m9.855suser 0m0.002ssys 0m4.075s[root@test1 tmp]# echo deadline > /sys/block/sda/queue/scheduler [root@test1 tmp]# time dd if=/dev/zero f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.84128 seconds, 92.0 MB/sreal 0m6.937suser 0m0.002ssys 0m3.447s测试结果:第一 anticipatory,用了6.79441秒,速度为92.6MB/s第二 deadline,用了6.84128秒,速度为92.0MB/s第三 cfq,用了6.93058秒,速度为90.8MB/s第四 noop,用了9.49418秒,速度为66.3MB/s3)测试同时读/写[root@test1 tmp]# echo deadline > /sys/block/sda/queue/scheduler [root@test1 tmp]# dd if=/dev/sda1 f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 15.1331 seconds, 41.6 MB/s[root@test1 tmp]# echo cfq > /sys/block/sda/queue/scheduler[root@test1 tmp]# dd if=/dev/sda1 f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 36.9544 seconds, 17.0 MB/s[root@test1 tmp]# echo anticipatory > /sys/block/sda/queue/scheduler [root@test1 tmp]# dd if=/dev/sda1 f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 23.3617 seconds, 26.9 MB/s[root@test1 tmp]# echo noop > /sys/block/sda/queue/scheduler[root@test1 tmp]# dd if=/dev/sda1 f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 17.508 seconds, 35.9 MB/s测试结果:第一 deadline,用了15.1331秒,速度为41.6MB/s第二 noop,用了17.508秒,速度为35.9MB/s第三 anticipatory,用了23.3617秒,速度为26.9MS/s第四 cfq,用了36.9544秒,速度为17.0MB/s五)ioniceionice可以更改任务的类型和优先级,不过只有cfq调度程序可以用ionice. 有三个例子说明ionice的功能:采用cfq的实时调度,优先级为7ionice -c1 -n7 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300& 采用缺省的磁盘I/O调度,优先级为3ionice -c2 -n3 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300& 采用空闲的磁盘调度,优先级为0ionice -c3 -n0 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&ionice的三种调度方法,实时调度最高,其次是缺省的I/O调度,最后是空闲的磁盘调度.ionice的磁盘调度优先级有8种,最高是0,最低是7.注意,磁盘调度的优先级与进程nice的优先级没有关系.一个是针对进程I/O的优先级,一个是针对进程CPU的优先级.。

linux系统磁盘io极限值

linux系统磁盘io极限值

linux系统磁盘io极限值Linux系统的磁盘IO性能是系统性能的重要组成部分,磁盘IO 性能的优化可以提高系统的整体性能。

本文将介绍Linux系统磁盘IO的基本知识和如何确定磁盘IO的极限值。

一、磁盘IO基本知识磁盘IO是指计算机向磁盘读取数据或写入数据的过程。

在Linux 系统中,磁盘IO分为同步IO和异步IO两种方式。

同步IO是指读写操作需要等待数据传输完成才能返回,异步IO则是读写操作可以立即返回,数据传输过程在后台进行。

磁盘IO的性能参数有多个,包括吞吐量、响应时间、IOPS等。

其中,吞吐量是指单位时间内传输的数据量,响应时间是指IO操作的延迟时间,IOPS(每秒IO操作数)是指在一秒钟内可以完成的随机IO操作数量。

二、确定磁盘IO极限值确定磁盘IO极限值可以通过两个指标:吞吐量和IOPS。

一方面,吞吐量可以反映磁盘IO的总体性能,另一方面,IOPS可以反映磁盘IO的响应速度。

1. 磁盘吞吐量的测量方法磁盘吞吐量可以通过dd命令测量。

dd命令可以读写指定大小的数据块,可以用于测试磁盘的读写速度。

例如,使用以下命令可以测试磁盘的写入速度:dd if=/dev/zero of=test bs=1M count=1000其中,if参数指定输入文件为/dev/zero,of参数指定输出文件为test,bs参数指定每次读写的块大小,count参数指定读写的块数。

完成写入后,可以使用以下命令测试磁盘的读取速度:dd if=test of=/dev/null bs=1M count=1000其中,if参数指定输入文件为test,of参数指定输出文件为/dev/null,bs参数和count参数的含义与上述相同。

2. 磁盘IOPS的测量方法磁盘IOPS可以通过fio命令测量。

fio是一个灵活的IO测试工具,可以模拟不同的IO场景,并提供多种测试参数,包括随机读写、顺序读写、混合读写等。

例如,使用以下命令可以测试磁盘的随机读写IOPS:fio --name=randwrite --ioengine=sync --rw=randwrite--bs=4k --numjobs=32 --size=100M --runtime=60 --time_based 其中,name参数指定测试任务名称,ioengine参数指定IO引擎,rw参数指定读写模式,bs参数指定每次读写的块大小,numjobs参数指定并发读写任务数,size参数指定测试数据大小,runtime参数指定测试的运行时间,time_based参数指定测试按时间计算。

LinuxIO监控与深入分析

LinuxIO监控与深入分析

LinuxIO监控与深⼊分析Linux IO 监控与深⼊分析引⾔接昨天电话⾯试,⾯试官问了系统 IO 怎么分析,当时第⼀反应是使⽤ iotop 看系统上各进程的 IO 读写速度,然后使⽤ iostat 看 CPU 的%iowait 时间占⽐,(%iowait:CPU等待输⼊输出完成时间的百分⽐,%iowait的值过⾼,表⽰硬盘存在I/O瓶颈)但回答并是不很全⾯,确实,⽐较久之前写过⼀篇,很久没有在系统上分析 IO 状态了,所以有好⼏个分析⼯具和参数忘记了(说明要熟悉⼀个知识和技能是需要不断应⽤和重复学习,熟能⽣巧很有道理,扯远了,接着说 IO 监控与分析),然后⾯试官提⽰还要看 %util 参数(表⽰磁盘的繁忙程度),他⼀说,我确实了也记起来了。

这个也是常⽤要看的参数。

下⾯我重新查找相关资料并再次学习⼀下吧,还是要经常在实际⼯作中多应⽤才能熟练。

1 系统级 IO 监控iostat[root@xxxx_wan360_game ~]# iostat -xdm 1Linux 2.6.32-358.el6.x86_64 (xxxx_wan360_game) 12/06/2016 _x86_64_ (8 CPU)Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %utilxvdep1 0.00 0.00 0.01 1.31 0.00 0.02 31.35 0.00 1.63 0.06 0.01Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %utilxvdep1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %utilxvdep1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %utilxvdep1 0.00 0.00 0.00 3.00 0.00 0.01 8.00 0.00 0.00 0.00 0.00# iostat 选项-x Display extended statistics.This option works with post 2.5 kernels since it needs /proc/diskstats file or a mounted sysfs to get the statistics.This option may also work with older kernels (e.g. 2.4) only if extended statistics are available in /proc/partitions(the kernel needs to be patched for that).-d Display the device utilization report.-m Display statistics in megabytes per second instead of blocks or kilobytes per second.Data displayed are valid only with kernels 2.4 and later.rrqm/sThe number of read requests merged per second that were queued to the device.排队到设备时,每秒合并的读请求数量wrqm/sThe number of write requests merged per second that were queued to the device.排队到设备时,每秒合并的写请求数量r/sThe number of read requests that were issued to the device per second.每秒发送给设备的读请求数量w/sThe number of write requests that were issued to the device per second.每秒发送给设备的的写请求数量rMB/sThe number of megabytes read from the device per second.每秒从设备中读取多少 MBswMB/sThe number of megabytes written to the device per second.每秒往设备中写⼊多少 MBsavgrq-szThe average size (in sectors) of the requests that were issued to the device.分发给设备的请求的平均⼤⼩(以扇区为单位)磁盘扇区是磁盘的物理属性,它是磁盘设备寻址的最⼩单元,磁盘扇区⼤⼩可以⽤ fdisk -l 命令查看另外,常说的“块”(Block)是⽂件系统的抽象,不是磁盘本⾝的属性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于Linux性能监控相信大家已经小有了解,对于IO篇,让我们先分析一些具体的情况,在这些情况下I/O会成为系统的瓶颈。

我们会用到工具top,vmstat,iostat,sar等。

每一个工具的输出都从不同的方面反映除系统的性能情况。

Linux性能监控情况1:同一时间进行大量的I/O操作
在这种情况时我们会发现CPU的wa时间百分比会上升,证明系统的idle时间大部分都是在等待I/O操作。

# vmstat 1
procs -----memory----- ---swap---io---- --system--cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
3 2 0 55452 9236 1739020 0 0 9352 0 2580 8771 20 2
4 0 57
2 3 0 53888 9232 1740836 0 0 14860 0 2642 8954 23 25 0 52
2 2 0 51856 9212 1742928 0 0 12688 0 2636 8487 2
3 25 0 52
从这个输出我们可以看到CPU有50%的时间都在等待I/O操作,我们还可以看到系统的bi值很大,证明系统有大量的I/O请求将磁盘内容读入内存。

没有很好的工具能看到到底是哪个进程在进行I/O读写。

但我们可以通过top 命令的输出来猜测
# top -d 1
top - 19:45:07 up 1:40, 3 users, load average: 6.36, 5.87, 4.40
Tasks: 119 total, 3 running, 116 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9% us, 87.1% sy, 0.0% ni, 0.0% id, 5.9% wa, 1.0% hi, 0.0% si
Mem: 2075672k total, 2022668k used, 53004k free, 7156k buffers
Swap: 2031608k total, 132k used, 2031476k free, 1709372k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ nFLT COMMAND 3069 root 5 -10 450m 303m 280m S 61.5 15.0 10:56.68 4562 vmware-vmx
3016 root 5 -10 447m 300m 280m S 21.8 14.8 12:22.83 3978 vmware-vmx
3494 root 5 -10 402m 255m 251m S 3.0 12.6 1:08.65 3829 vmware-vmx
3624 root 5 -10 401m 256m 251m S 1.0 12.6 0:29.92 3747 vmware-vmx 将top的输出通过faults进行排序。

我们可以看到vmware产生最多的page faults。

也就是说它进行了大量的IO操作。

Linux性能监控情况2:管道太小
任何I/O操作都需要一定的时间,而且这些时间对于硬盘来说是确定的,它包含磁盘旋转的延时RD(rotation delay)和磁头搜索时间DS(disk seek)。

RD 由磁盘转速(RPM)决定。

RD是磁盘旋转一周所需时间的一半。

如RPM为10000. RPS=RPM/60=166
1/166=0.0006=6ms 磁盘旋转一周要6毫秒
RD=6ms/2=3ms
磁盘平均搜索时间是3ms,数据传输的平均延时是2ms,这样一次I/O操作的平均时间是:
3ms+3ms+2ms=8ms
IOPS=1000/8=125 这块磁盘的每秒IO数(IOPS)为125。

所以对于10000RPM 的磁盘来说它所能承受的IO操作在IOPS在120~150之间。

如果系统的I/O请求超过这个值,就会使磁盘成为系统的瓶颈。

对与系统而言有两种不同种类的I/O压力,连续I/O和随机I/O。

连续I/O常常出现在企业级数据库这样的应用中,需要连续的读取大量数据。

这种系统的性能依靠它读取和移动数据的大小和快慢。

我们用iostat来监控,会发现rKB/s,wKB/s会很高。

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/sda 0.00 12891.43 0.00 105.71 0.00 106080.00 0.00 53040.00 1003.46 1099.43 3442.43 26.49 280.00
从输出我们看到w/s=105,wKB/s=53040.所以53040/105=505KB per I/O.
对于随机I/O的系统来说性能的关注点不在搜传输数据的大小和速度,而是在磁盘的IOPS。

这类系统的I/O请求比较小但是数量很大,如Web服务器和Mail服务器。

他们的性能主要依赖每秒钟可处理的请求数:
# iostat -x 1
avg-cpu: %user %nice %sys %idle
2.04 0.00 97.96 0.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/sda 0.00 633.67 3.06 102.31 24.49 5281.63 12.24 2640.82 288.89 73.67 113.89 27.22 50.00
从输出我们看到w/s=102,wKB/s=2640.所以2640/102=23KB per I/O.因此对于连续I/O系统来说我们要关注系统读取大量数据的能力即KB per request.对于随机I/O系统我们注重IOPS值.。

相关文档
最新文档