Linux iotop工具简介
Linux iotop工具简介
iotop的简介:
iotop是一款开源、免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息。它是Python语言编写的,与iostat工具比较,iostat是系统级别的IO监控,而iotop是进程级别IO监控。目前最新的版本为iotop 0.6。其官方网址http://guichaz.free.fr/iotop/
iotop的安装:
注意,iotop的安装有前提条件(如果操作系统不满足这些条件,iotop无法正确安装):
1:内核版本为2.6.20或更高版本
2:Python 2.7或更高的版本
官方文档的详细介绍如下:
Linux has always been able to show how much I/O was going on (the bi and bo columns of the vmstat 1 command).
Iotop is a Python program with a top like UI used to show of behalf of which process is the I/O going on. It requires Python ≥ 2.7 and a Linux kernel ≥ 2.6.20 with the TASK_DELAY_ACCT CONFIG_TASKSTATS, TASK_IO_ACCOUNTING and CONFIG_VM_EVENT_COUNTERS options on.
iotop的yum安装
yum安装是最简单、快捷的。前提条件是你有配置yum的源配置。
[root@DB-Server ~]# python -V
Python 2.7.5
[root@DB-Server ~]# uname -a
Linux DB-Server 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@DB-Server ~]#
[root@DB-Server ~]# yum -y install iotop
iotop的源码安装
wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.bz2
tar -xvf iotop-0.6.tar.gz
cd iotop-0.6
python setup.py build
python setup.py install
iotop的参数
iotop --help
Usage: /usr/local/sbin/iotop [OPTIONS]
DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling
- SWAPIN and IO are the percentages of time the thread spent respectively
- 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).
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.
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
-b, --batch non-interactive mode
-n NUM, --iter=NUM number of iterations before ending [infinite]
-d SEC, --delay=SEC delay between iterations [1 second]
-p PID, --pid=PID processes/threads to monitor [all]
-u USER, --user=USER users to monitor [all]
-P, --processes only show processes, not all threads
-a, --accumulated show accumulated I/O instead of bandwidth
-k, --kilobytes use kilobytes instead of a human friendly unit
-t, --time add a timestamp on each line (implies --batch)
-q, --quiet suppress some lines of header (implies --batch)
参数
长参数
参数描述
--version
显示版本号
-h
--help
显示帮助信息
-o
--only
只显示正在产生I/O的进程或线程,运行过程中,可以通过按o随时切换
-b
--batch
非交互模式下运行,一般用来记录日志。
-n NUM
--iter=NUM
设置监控(显示)NUM次,主要用于非交互模式。默认无限
-d SEC
--delay=SEC
设置显示的间隔秒数,支持非整数
-p PID
--pid=PID
只显示指定进程(PID)的信息
-u USER
--user=USER
显示指定的用户的进程的信息
-P
--processes
只显示进程,不显示所有线程
-a
--accumulated
累积的I/O,显示从iotop启动后每个进程累积的I/O总数,便于诊断问题
-k
--kilobytes
显示使用KB单位
-t
--time
非交互模式下,加上时间戳。
-q
--quiet
只在第一次监测时显示列名. 去除头部一些行:这个参数可以设置最多3次来移除头部行:-q列头部只在最初交互显示一次;-qq列头部不显示;-qqq,I/O的总结不显示
iotop的快捷键
r:反向排序,
o:切换至选项--only,
p:切换至--processes选项,
a:切换至--accumulated选项
q:退出
i:改变线程的优先级
iotop的例子
1:只显示正在产生I/O的进程
iotop -o
clip_image001
2:使用非交互模式将iotop命令输出信息写入日志
nohup iotop -b -o -n 10 -d 5 -t > /tmp/iotop.log &
3:借助iotop命令找到消耗I/O最高的进程,然后通过进程找到其正在执行的SQL语句
iotop -oP
PID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
11741 be/4 oracle 4.70 M/s 0.00 B/s 0.00 % 98.60 % ora_s004_SCM2
11739 be/4 oracle 66.99 M/s 0.00 B/s 0.00 % 93.30 % ora_s005_SCM2
11741 be/4 oracle 21.76 M/s 0.00 B/s 0.00 % 91.78 % ora_s006_SCM2
11743 be/4 oracle 4.87 M/s 3.78 M/s 0.00 % 27.74 % ora_s007_SCM2
11745 be/4 oracle 62.39 K/s 0.00 B/s 0.00 % 2.88 % ora_s008_SCM2
11733 be/4 oracle 39.00 K/s 0.00 B/s 0.00 % 2.08 % ora_s002_SCM2
11697 be/4 oracle 0.00 B/s 1879.61 K/s 0.00 % 0.30 % ora_dbw0_SCM2
11699 be/4 oracle 0.00 B/s 102.36 K/s 0.00 % 0.20 % ora_lgwr_SCM2
在找到消耗I/O最大的进程后,找出ORACLE进程正在执行的SQL语句
SQL> @getsql_by_spid.sql
Enter value for pid: 11741
old 13: WHERE c.spid = '&pid'))
new 13: WHERE c.spid = '11741'))
SQL_TEXT
...............................(实际环境中,这里会输出SQL语句)
getsql_by_spid.sql脚本如下所示:
SELECT /+ ORDERED /
sql_text FROM v$sqltext a
WHERE (a.hash_value, a.address) IN (
SELECT DECODE (sql_hash_value, 0, prev_hash_value, sql_hash_value ), DECODE (sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid'))
ORDER BY piece ASC
/
这里只简单列了几个例子,因为iotop命令非常简单,了解iotop的参数和快捷方式后,基本上只需根据实际需求去获取进程或信息的I/O信息,剩下就是分析判断了。
作者:潇湘隐者
出处:http://www.cnblogs.com/kerrycode/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java线程池,阿里为什么不允许使用Executors?
java线程池,阿里为什么不允许使用Executors?阅读目录 带着问题基础Java中的线程池最后回到目录带着问题阿里Java代码规范为什么不允许使用Executors快速创建线程池?下面的代码输出是什么?ThreadPoolExecutor executor = new ThreadPoolExecutor( 1, //corePoolSize 100, //maximumPoolSize 100, //keepAliveTime TimeUnit.SECONDS, //unit new LinkedBlockingDeque<>(100));//workQueue for (int i = 0; i < 5; i++) { final int taskIndex = i; executor.execute(() -> { System.out.println(taskIndex); try { Thread.sleep(Long.MAX_VALUE); } catch (InterruptedException e) { e.printStackTrace...
- 下一篇
前端学习笔记(3) - JavaScript对象分类
JavaScript中的对象分类 宿主对象(host Objects):由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定。 内置对象(Built-in Objects):由 JavaScript 语言提供的对象。 固有对象(Intrinsic Objects ):由标准规定,随着 JavaScript 运行时创建而自动创建的对象实例。 原生对象(Native Objects):可以由用户通过 Array、RegExp 等内置构造器或者特殊语法创建的对象。 普通对象(Ordinary Objects):由{}语法、Object 构造器或者 class 关键字定义类创建的对象,它能够被原型继承。 函数对象与构造器对象 JavaScript中使用对象来模拟函数与构造器。JavaScript 为这一类对象预留了私有字段机制,并规定了抽象的函数对象与构造器对象的概念。 函数对象的定义是:具有 [[call]] 私有字段的对象,构造器对象的定义是:具有私有字段 [[construct]] 的对象。我们可以这样说,任何对象只需要实现 [[call]],它就是一个函数对象,可...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Thymeleaf,官方推荐html解决方案