流量监控利器:iotop深度指南

1.简介

iotop:一款类似top的I/O监控工具。

项目主页http://guichaz.free.fr/iotop/

iotop由python编写(运行需安装Python ≥ 2.7)通过linux内核(2.6.20以上)来监控I/O信息,通过列表的方式展示了当前系统中进程/线程的I/O使用率。如果想要通过iotop获取I/O信息,那么在Linux内核编译时,需要开启CONFIG_TASK_DELAY_ACCT、CONFIG_TASK_IO_ACCOUNTING, CONFIG_TASKSTATS 和 CON‐FIG_VM_EVENT_COUNTERS这三个变量。

 

iotop监控的主要项:

  • 进程/线程的I/O的读写带宽
  • 进程/线程swapin的耗时占比
  • 进程/线程的I/O阻塞(等待)耗时占比
  • 每个进程/线程的I/O优先级
  • 系统中I/O总读写带宽
  • 系统中I/O实际读写带宽(和总读写带宽有时候值并不一致)

 

2.安装

2.1 yum/apt安装

Ubuntu

sudo apt install -y iotop

Centos

sudo yum install -y iotop 

2.2 源码安装

 

#下载源码 
git clone git://repo.or.cz/iotop.git 
#进入对应目录 
cd iotop 
#编译 
python setup.py build 
#安装 
sudo python setup.py install

3.帮助

输入:iotop -h

Usage: /usr/sbin/iotop [OPTIONS]

 

DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling

period. SWAPIN and IO are the percentages of time the thread spent respectively

while swapping in and waiting on I/O more generally. PRIO is the I/O priority at

which the thread is running (set using the ionice command).

/*

DISK READ:采样周期内读磁盘的带宽(平均值)

DISK WRITE:采用周期内写磁盘的带宽(平均值)

SWAPIN:磁盘换入的时间占总时间的百分比(内存不够用的时候会进行内存换入到磁盘)

IO: 普通的磁盘读写等待时间占总时间的百分比

PRIO: 进程/线程进行I/O调度时候的优先级(使用ionice设定)

*/

 

Controls: left and right arrows to change the sorting column, r to invert the

sorting order, o to toggle the --only option, p to toggle the --processes

option, a to toggle the --accumulated option, i to change I/O priority, q to

quit, any other key to force a refresh.

/*

按键控制:

⬅️/➡️:选择排序的列

r:按逆序排列当前IO进程/线程列表

o:同--only参数

p: 同--processes参数

a: 同--accumulated参数

i: 改变I/O优先级

q: 退出iotop

其他任意键:强制刷新当前IO进程/线程列表

*/

 

Options:

--version show program's version number and exit //显示版本信息

-h, --help show this help message and exit //显示帮助信息

-o, --only only show processes or threads actually doing I/O //显示当前有I/O活动的进程或者线程(也就是没有进行IO操作的进程/线程不展示到列表)

-b, --batch non-interactive mode //非交互模式,即后台模式(这个可以把信息重定位输出到某个文件)

-n NUM, --iter=NUM number of iterations before ending [infinite] //信息刷新次数,默认一直刷新,不会自行退出;如果指定该参数为N,则iotop在更新N次列表信息后自动退出(此参数在批处理模式下比较方便)

-d SEC, --delay=SEC delay between iterations [1 second] //信息刷新间隔,即每隔几秒刷新一次,默认为每隔一秒刷新一次

-p PID, --pid=PID processes/threads to monitor [all] //筛选展示特定PID的进程或者线程,默认为所有进程/线程

-u USER, --user=USER users to monitor [all] //筛选展示特定用户下进程/线程IO,默认为所有用户

-P, --processes only show processes, not all threads //筛选只展示进程的IO信息,默认展示所有进程和线程的IO信息

-a, --accumulated show accumulated I/O instead of bandwidth //设置IO的值为累计IO而不是实时IO

-k, --kilobytes use kilobytes instead of a human friendly unit //设置IO的单位为KB/s,默认根据IO大小自行进行单位适配。(在批处理模式下设置比较方便统计)

-t, --time add a timestamp on each line (implies --batch) //批处理模式,在每行前面加上时间戳

-q, --quiet suppress some lines of header (implies --batch) //批处理模式,只在打印一次列名

-qq column names are never printed, //不打印列名

-qqq the I/O summary is never printed. //连概要信息也不打印

4.例子

1.每隔十秒打印一次信息,仅打印有活跃I/O的进程和线程数据

iotop -d 10 -o

2.每隔十秒打印一次信息,设置单位为KB/s,仅打印有活跃I/O的进程和线程数据

iotop -d 10 -o -k

3.每隔十秒打印一次信息,设置单位为KB/s, 使用累加模式,仅打印有活跃I/O的进程和线程数据

iotop -d 10 -o -k -a

如图:红框里面变成累加值而不是实时值(对比上图)

4.批处理模式1

每隔十秒将iotop中的有活跃IO的进程/线程相关信息输出到文件控制台,并同时输出到文件

iotop -d 10 -o -b | tee iotop.result

5.批处理模式2

其他同上,增加了两个参数,-n和-k,使用计量单位为KB/s,统计十次后自动退出

iotop -d 10 -o -b -k -n 10 | tee iotop.result

6.批处理模式3

这里指定了只打印PID为2025的进程,且在每行都加上时间戳

iotop -p 2025 -t -b -n 10 | tee iotop.result

5. 自动化

我们可以利用第六个例子来获取机器上指定进程的IO信息

例如:机器上部署了两个服务,进程id分别为2025和345,然后执行如下命令(-n自行修改,-n的次数乘以-d的时间即为总统计时间,如下面应该是10*10等于100秒)

iotop -p 2025 -p 345 -t -b -n 10 -d 10| tee iotop.result

然后用awk或者python解析iotop.result,可以生成对应的csv文件。

利用csv文件可以再excel中绘制曲线图或者用python的图形库直接绘图。

传送门:2021最新测试资料与大厂招聘合集

博主:测试生财(一个不为996而996的测开码农)

座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。

内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。

csdn:https://blog.csdn.net/ccgshigao

博客园:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374

微信公众号:测试生财(定期分享独家内容和资源)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公众号-测试生财

点赞和关注比打赏更重要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值