I/O性能分析-对问题的分析不能只看表象

0x01 缘由

     最近,生产环境下出现了一些事故,系统宕机。随之大家开始重视运维,最近发布版本程序后,系统集成部对一进程I/O进行了报警,说程序I/O占用99%,如下图:
     
     IO那列长期处于99%!

0x02 I/O分析中关注的一些参数

     磁盘利用率(disk utilization)
     磁盘队列长度(disk queue length)
     磁头/逻辑卷的读/写速率(read/write rates per spindle/logical volume)
     原始I/O(raw I/O):主要用于数据库应用
     交换队列的长度(swap queue length)
     缓存命中率(buffer cache hit ratio)
     网络文件系统和无盘工作站速率(NFS and diskless rates(server))

0x02 I/O资源成为系统性能的瓶颈的征兆

     过高的磁盘利用率(high disk utilization)
     太长的磁盘等待队列(large disk queue length)
     等待磁盘I/O的时间所占的百分率太高(large percentage of time waiting for disk I/O)
     太高的物理I/O速率:large physical I/O rate(not sufficient in itself)
     过低的缓存命中率(low buffer cache hit ratio(not sufficient in itself))
     太长的运行进程队列,但CPU却空闲(large run queue with idle CPU) 

0x03占用I/O资源的大户

     换页(paging):paging不仅会引起内存问题,还可能引起磁盘问题;
     open,creat,and stat system calls:系统调用会引起大量的磁盘I/O;
     multiuser I/O and random I/O
     relational database
     core dumps

0x04 常用分析工具

     iotop:
     作用:iotop命令是一个用来监视磁盘I/O使用状况的top类工具。
     man iotop:
     iotop显示在采样期间由每个进程/线程读取和写入的I / O带宽的列。 它还显示线程/进程交换时和在等待I/ O时花费的时间百分比。对于每个进程,显示其I /O优先级(类/级别)。 此外,在采样周期内读取和写入的总I/ O带宽显示在接口顶部。
     选项:
          -o:只显示有io操作的进程。
          -b:批量显示,无交互,主要用作记录到文件。
          -n NUM:显示NUM次,主要用于非交互式模式。
          -d SEC:间隔SEC秒显示一次。
          -p PID:监控的进程pid。
          -u USER:监控的进程用户。
     实例:
    
     再次理解发现,此参数只表明I/O花费时间百分比。
     
    iostat:
    作用:iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

t
     选项:

 
 每列的意义:
     Device 监测设备名称
     rrqm/s 每秒需要读取需求的数量
     wrqm/s 每秒需要写入需求的数量
     r/s 每秒实际读取需求的数量
     w/s 每秒实际写入需求的数量
     rsec/s 每秒读取区段的数量
     wsec/s 每秒写入区段的数量
     rkB/s 每秒实际读取的大小,单位为KB
     wkB/s 每秒实际写入的大小,单位为KB
     avgrq-sz 需求的平均大小区段
     avgqu-sz 需求的平均队列长度
     await 等待I/O平均的时间(milliseconds)
     svctm I/O需求完成的平均时间
     %util 被I/O需求消耗的CPU百分比
     
    pidstat:
    作用:pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
    实例:
     http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858874.html
     
     工具很多,不再列举。

0x05瓶颈的判断依据

     iostat:
     1、如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
     2、svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。
await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。

0x06引申的进程学习

     JBD2 :自从Linux系统引入了Ext4文件系统了,就有一个JBD2为之服务,其实JBD2也可以为其它的文件系统服务,但是目前来说只有Ext4和OCFS2文件系统用它。JBD2作用的原理是在Ext4文件系统把数据提交到驱动前先调用它,JBD2根据系统的不同设置来完成数据或是操作的备份后,再让Ext4系统提交数据,当文件系统把数据写入了设备后,就通过JBD2把刚才数据或是操作备份删除,这样来保证数据的一致性。
    flush:释放存储在缓存区中的数据, flush-x:y是一类进程,这在系列的上一篇文章里已经讲到过,系统的绝大部分的bdi设备都会有对应的flush-x:y内核进程,而这个x:y是对应bdi设备的设备号。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值