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的源配置。
[[email protected] ~]# python -V
Python 2.7.5
[[email protected] ~]# 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
[[email protected] ~]#
[[email protected] ~]# 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
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).
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
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,monospace; wIDth: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 11pt; padding-right: 0px; background-color: white"> sql_hash_value
),monospace; wIDth: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 11pt; padding-right: 0px; background-color: white"> DECODE (sql_hash_value,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信息,剩下就是分析判断了。
总结以上是内存溢出为你收集整理的Linux iotop工具简介全部内容,希望文章能够帮你解决Linux iotop工具简介所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)