linux服务器如果磁盘性能不佳,或者进程操作IO量超过磁盘负荷,都会导致磁盘IO响应缓慢,甚至出现宕机的情况。很多人会说,我有iostat命令啊。但是如果需要找到哪个进程对磁盘IO操作压力最大,iostat是不能帮我们直接呈现的,这时候,另一个利器iotop就派上用场了。

iotop命令

iotop命令是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。

iotop安装

一般iotop默认是没有安装的,iotop安装也很简单,你需要如下操作(其它linux版本可自行搜索安装方法):

CentOS/Redhat:yum install iotop
Debian/Ubuntu:apt-get install iotop

编译安装:

1
2
3
4
wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.gz
tar zxf iotop-0.4.4.tar.gz
python setup.py build
python setup.py install

iotop输出

iotop输出很容易看懂:

第一行:Read和Write速率总计

第二:实际的Read和Write速率

第三行:参数如下:

  • 线程ID(按p切换为进程ID)
  • 优先级
  • 用户
  • 磁盘读速率
  • 磁盘写速率
  • swap交换百分比
  • IO等待所占的百分比
  • 线程/进程命令

常用参数

  • -o, --only只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
  • -b, --batch非交互模式,一般用来记录日志。
  • -n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下很有用。
  • -d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1。
  • -p PID, --pid=PID指定监测的进程/线程。
  • -u USER, --user=USER指定监测某个用户产生的I/O。
  • -P, --processes仅显示进程,默认iotop显示所有线程。
  • -a, --accumulated显示累积的I/O,而不是带宽。
  • -k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用。
  • -t, --time 加上时间戳,非交互非模式。
  • -q, --quiet 禁止头几行,非交互模式。有三种指定方式。
    • -q 只在第一次监测时显示列名
    • -qq 永远不显示列名。
    • -qqq 永远不显示I/O汇总。

交互按键

和top命令类似,iotop也支持以下几个交互按键。

  • left和right方向键:改变排序。
  • r:反向排序。
  • o:切换至选项–only。
  • p:切换至–processes选项。
  • a:切换至–accumulated选项。
  • q:退出。
  • i:改变线程的优先级。

写在最后

itop通过方向键选择按哪一列来排序,基本上我们会以此来判断当前哪些线程/进程对磁盘有IO操作,以及操作的IO速率,但是要判断磁盘IO负载是否已饱和,还需要结合top命令,当前磁盘最大性能等指标综合判断。