详解Linux下的IO监控与分析:系统级+进程级+业务级+文件级IO
概述 学习优化,理解IO还是很重要的,今天抽空整理了一下这块内容,下面一起看看吧~ 下面这张经典的图源自 Linux Performance and Tuning Guidelines.pdf 各种IO监视工具在Linux IO 体系结构中的位置 1 、系统级IO监控 1.1、iostat
%util 代表磁盘繁忙程度。100% 表示磁盘繁忙, 0%表示磁盘空闲。但是注意,磁盘繁忙不代表磁盘(带宽)利用率高 argrq-sz 提交给驱动层的IO请求大小,一般不小于4K,不大于max(readahead_kb, max_sectors_kb) 可用于判断当前的IO模式,一般情况下,尤其是磁盘繁忙时, 越大代表顺序,越小代表随机 svctm 一次IO请求的服务时间,对于单块盘,完全随机读时,基本在7ms左右,既寻道+旋转延迟时间 1.2、各统计量之间关系 %util = ( r/s + w/s) * svctm / 1000 # 队列长度 = 到达率 * 平均服务时间 avgrq-sz = ( rMB/s + wMB/s) * 2048 / (r/s + w/s) # 2048 为 1M / 512 1.3、总结 iostat 统计的是通用块层经过合并(rrqm/s, wrqm/s)后,直接向设备提交的IO数据,可以反映系统整体的IO状况,但是有以下2个缺点:
2 、进程级IO监控 2.1、 iotop 和 pidstat (仅rhel6u系列) iotop 顾名思义, io版的top pidstat 顾名思义, 统计进程(pid)的stat,进程的stat自然包括进程的IO状况 这两个命令,都可以按进程统计IO状况,因此可以知道: 1)当前系统哪些进程在占用IO,百分比是多少? 2)占用IO的进程是在读?还是在写?读写量是多少? pidstat 参数很多,介绍几个比较常用的:
2.2、block_dump, iodump iotop 和 pidstat 都依赖于/proc/pid/io文件导出的统计信息, 这个对于老一些的内核是没有的,比如rhel5u2。 因此只好用以上2个命令来替代:
# dmesg
# 不停的dmesg -c
2.3、总结 从进程级IO监控 ,可以看出:
但是也没有办法跟业务层的read,write联系在一起,同时颗粒度较粗,没有办法知道当前进程读写了哪些文件? 耗时? 大小 ? 3、 业务级IO监控 3.1、ioprofile ioprofile 命令本质上是 lsof + strace, ioprofile 可以解决以下三个问题:
3.2、实例 假设某个行为会触发程序一次IO动作,例如: "一个页面点击,导致后台读取A,B,C文件" ./io_event # 假设模拟一次IO行为,读取A文件一次, B文件500次, C文件500次 ioprofile -p `pidof io_event` -c count # 读写次数 ioprofile -p `pidof io_event` -c times # 读写耗时 (编辑:ASP站长网) |