linux下使用iotop查看每个进程的IO占用
linux/unix平台下查看总的磁盘IO情况的工具很多,其中最为常用的优秀工具是iostat。该工具是sysstat工具包里的一个工具,但iostat在针对每个进程或线程的具体IO使用情况时显的很无力。在这边方面iotop就显的很灵活,iotop的显示方式上继承了经典工具top的显示界面。
Iotop 使用 Python 语言编写而成,要求 Python 2.5(及以上版本)和 Linux kernel 2.6.20(及以上版本)。在centos/redhat/ubuntu平台下我们都可以很方便的在源里找到相应的包。
安装方式为:
yum -y install iotop 和 sudo apt-get install iotop
当然也可以选择源码包安装。其官方主页为:http://guichaz.free.fr/iotop/ (该站还有其他几个不错的python写的工具。)
注:在官网下载rpm包安装后使用时,可能会提示缺少curses包,通过pip或easy_install 安装时会提示不存在该模块,可以在操作系统的iso镜像中找到python-curses 的rpm包,直接安装即可。另外可能会提示确少iotop ui 模块,下载tar.gz包时,不会存在缺少ui模块的问题,解压后直接运行iotop.py即可。
啰嗦了半天,上个图先(来自运维之路361way.com):
其参数有以下几个:
用法 iotop -参数
- -o, --only - 只显示有实际读写I/O的进程或线程,而不是显示所有进程或线程,在交互的时候,可以按下o来切换显示模式
- -b, --batch - 非交互模式,通常用于记录I/O使用的脚本中
- -n NUM, --iter=NUM - 设置退出前执行的次数,通常在非交互的脚本中使用
- -d SEC, --delay=SEC - 刷新间隔时间,默认一秒。也可以使用小数点,例如 1.1秒
- -p PID, --pid=PID - 列出要监控的一组进程/线程(默认是所有)
- -u USER, --user=USER - 监控的用户列表(默认是所有)
- -P, --processes - 只显示进程。
- -a, --accumulated - 显示积累的(accumulated)I/O代替带宽。在这个模式下,iotop显示从iotop启动依赖已经完成的I/O进程数量
- -k, --kilobytes - 使用KB来显示而不是使用人容易理解的计算单位。这个模式比较适合在脚本中使用iotop。
- -t, --time - 在每一行添加一个时间戳
- -q, --quiet- 去除头部一些行:这个参数可以设置最多3次来移除头部行:-q列头部只在最初交互显示一次;-qq列头部不显示;-qqq,I/O的总结不显示。
其中按 r 是反顺序排列,按 o 为动态切换,按q退出。
实际使用中,会发现有总磁盘读写和实际磁盘读写,两者的结果会有一些差别,两都之间的关系如下:In addition, the total I/O bandwidth read and written during the sampling period is displayed at the top of the interface. Total DISK READ and Total DISK WRITE values represent total read and write bandwidth between processes and kernel threads on the one side and kernel block device subsystem on the other. While Actual DISK READ and Actual DISK WRITE values represent corresponding bandwidths for actual disk I/O between kernel block device subsystem and underlying hardware (HDD, SSD, etc.). Thus Total and Actual values may not be equal at any given moment of time due to data caching and I/O operations reordering that take place inside Linux kernel.
VIA.http://www.361way.com/iotop/1653.html