引子-排队
先引入一个例子了解下磁盘读写或者是磁盘读写中涉及到的一些术语。以超时出口排队为例
上图中要进入排队,你会选择那队,又是怎么考虑的呢?考虑因素有:
1、排队人数,首先考虑的应该是排队人少的,这个比较直观。
2、排队购买东西数量,其次在扫视排队情况时可能会注意到前面人购买东西多少。比如有的人买了一购物车东西,那么他耗时肯定会长。
3、收银员效率,从动作快慢和结账速度判断收银员能力会很快处理完。
4、时机,实时观察排队状态,对比前、后五分钟明显变化,比如新开一队
5、其他,是否有老人结算时用现金等,也会影响效率。
上面考虑的因素引入到磁盘读写中具体的专业术语,如下:
1、 r/s+w/s 类似于排队人的总数
2、 平均队列长度(avgqu-sz)类似于单位时间内平均排队人的个数
3、 平均服务时间(svctm)类似于收银员的收款速度
4、 平均等待时间(await)类似于平均每人的等待时间
5、 平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
6、 I/O 操作率 (%util)类似于收款台前有人排队的时间比例.
根据上面数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间,截图如下:
iostat简介
iostat--I/O statistics(输入/输出统计),将对系统的磁盘操作活动进行监视。
特点:汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。
[不能对某个进程进行深入分析,仅对系统的整体情况进行分析]
安装:iostat属于sysstat软件包。可以用yum install sysstat直接安装。
命令格式:iostat [参数] [间隔时间] [次数]
命令功能:查看CPU、网卡、tty设备、磁盘、CD-ROM 等设备的活动和负载情况。
常见参数:
-c:仅显示CPU统计信息,与-d选项互斥
-d:仅显示磁盘统计信息,与-c选项互斥
-h:使用NFS的输出报告。需要使用-n参数开启NFS。
-N:显示磁盘阵列(LVM) 信息。
-x:显示更详细的磁盘报告信息,默认只显示六列,显示更详细的信息
-n:显示NFS使用情况
-t:输出报告时显示系统时间
-p:[ { device [,…] | ALL } ] 显示磁盘分区的相关统计信息(默认粒度只到磁盘,不显示具体的逻辑分区)
-y:跳过不显示第一次报告的数据,因为iostat使用的是采样统计,所以iostat的第一次输出的数据是自系统启动以来的累计的数据
显示结果详解
cpu段:
%usr CPU在用户模式下的时间百分比
%nice CPU处在带NICE值的用户模式下的时间百分比
%system CPU在系统模式下的时间百分比
%iowait CPU等待输入输出完成时间的百分比
%steal 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idle CPU空闲时间百分比
如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲。
如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。
%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
device段:
•tps该设备每秒的传输次数(Indicate the number of transfers per
second that were issued to the device.)。“一次传输"意思是"一次I/O请求”。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
•kB_read/s 每秒从设备读取的数据量
•kB_wrtn/s 每秒向设备写入的数据量
•kB_read 读取的总数据量
•kB_wrtn 写入的总数据量
•如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
•如果 svctm 比较接近await,说明 I/O几乎没有等待时间;
•如果 await远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。
•如果avgqu-sz比较大,也表示有当量io在等待。
例子分析
模拟io压力:
dd if=/dev/zero of=loadfile bs=1M count=1024
for i in {1..100}; do \cp loadfile loadfile1; done
top查看:
iostat查看: iostat -x -t 1
iotop查看: iotop -oP