[toc]
实验背景
上数据库课,老师出了一个作业:比较两个数据系统处理数据对io的要求,分别使用Hadoop伪分布式和mysql环境。让两个大文件,做简单jion操作,观察磁盘io情况。分为两种小情况,共要做4次实验。
- 文件超出内存的情况下统计io
- 文件不超出内存的情况下统计io
这个文章的主体内容:如何在linux环境下,查看统计磁盘io情况
使用环境
cpu :AMD FX(tm)-6100 Six-Core Processor
memory :16G
disk1 :500G机械硬盘(sda)
disk2 :240G Kingston SSD(sdb)
iostat
安装
iostat属于sysstat中的一部分。所以必须先安装sysstat工具
sudo apt-get install sysstat -y
之后才能正常使用iostat
linux下查看命令帮助说明
man iostat
使用
单个使用 iostat 命令。信息从开机起累计io
iostat
命令来查看
组合使用
linux强大的功能是,各种命令组合使用,比如用grep筛选出我们感兴趣的内容,比如说下面的图片。我的linux安装在ssd上,由于还有windows系统,我的Ubuntu安装在sdb6分区通过筛选我只看sda6的情况加上 -m 以M为单位输出。加上 -pm sdb 1 表示输出报告(p),以(m)为单位,在我的Ubuntu系统上(sdb) 以1秒为间隔,输出。
实验过程及结果
- 用python,生成了一个5G大小的文件,存放在sda(磁盘)上备用
- 复制这个文件到 Ubuntu系统中。运行命令查看io情况
得到的io统计信息如下!
问题来了:
为什么,资源管理器显示,写入速度为约为120M/s实际的iostat命令会有这种波浪状。刚开始为0,之后为120M/s再接着240M/s 之后又为0。接着又循环!
可能几种的答案选择:
- 设置的监控粒度太小。 比如应该设置为0.5秒观测一次,再取平均
- 写磁盘,有内存缓存区。先把缓存区写满。再进一步写磁盘。所以有这种波浪现象。
进阶玩法
运用管道命令,和后台命令。同时执行监控。和拷贝大文件。把磁盘IO结果写入文件。
iostat -pm sdb 1 50|grep sdb6 >> ~/rs.txt & cp test3--5GB.txt ~/
这个bash命令的意思为:每秒刷新一次,共刷新50次(5G的文件,50秒应该写的完),把结果筛选出sdb6的信息(Ubuntu分区)写入文件
具体执行效果如下图,为方便看效果,我把所有窗口平铺整个屏幕
下一步使用
- 跟python,或者ruby等语言结合起来,即可以在程序中得到io情况返回,进行io情况统计分析