当前位置: 首页 > news >正文

Linux系统IO分析工具之iotop参数详解(查看IO占用)

iotop – simple top-like I/O monitor
iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息(requires 2.6.20 or later)

安装:


代码如下:

yum -y install iotop

用法:

代码如下:

iotop [OPTIONS]

选项:


代码如下:

--version #显示版本号
-h, --help #显示帮助信息
-o, --only #显示进程或者线程实际上正在做的I/O,而不是全部的,可以随时切换按o
-b, --batch #运行在非交互式的模式
-n NUM, --iter=NUM #在非交互式模式下,设置显示的次数,
-d SEC, --delay=SEC #设置显示的间隔秒数,支持非整数值
-p PID, --pid=PID #只显示指定PID的信息
-u USER, --user=USER #显示指定的用户的进程的信息
-P, --processes #只显示进程,一般为显示所有的线程
-a, --accumulated #显示从iotop启动后每个线程完成了的IO总数
-k, --kilobytes #以千字节显示
-t, --time #在每一行前添加一个当前的时间
-q, --quiet #suppress some lines of header (implies --batch). This option can be specified up to three times to remove header lines.
-q column names are only printed on the first iteration,
-qq column names are never printed,
-qqq the I/O summary is never printed.


iotop -p 较为常用,可具体指定查看某个进程的IO占用

可用的命令(在运行iotop命令后按相应键位):
使用left和right改变排序(方向键改变排序列),还可使用以下命令:


代码如下:

r:反向排序,
o:切换至选项--only,
p:切换至--processes选项,
a:切换至--accumulated选项
q:退出
i:改变线程的优先级

例子:

代码如下:

$ iotop
$ iotop –b –n 3 –d 5

—————————————————————————————————————————————————————————————————————————————

IO负载高的定位:

前言:

在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的util),但是无法快速的定位到IO负载的来源进程和来源文件导致无法进行相应的策略来解决问题。

这个现象在MySQL上更为常见,在5.6(performance_schema提供io instrument)之前,我们通常只能猜到是MySQL导致的高IO,但是没法定位具体是哪个文件带来的负载。

例如是ibdata的刷写?还是冷门ibd的随机读取?

本文就将介绍一个比较简单的定位IO高负载的流程。

 

工具准备:

iotop: http://guichaz.free.fr/iotop/

pt-ioprofile:http://www.percona.com/downloads/percona-toolkit/2.2.1/

 


 

Step1 : iostat 查看IO情况

 iostat -x 1 查看IO情况,从下图可以看到dfa这个磁盘的IO负载较高,接下来我们就来定位具体的负载来源

 

 


 

 Step2: iotop定位负载来源进程

 iotop的本质是一个python脚本,从proc中获取thread的IO信息,进行汇总。

从下图可以看出大部分的IO来源都来自于mysqld进程。因此可以确定dfa的负载来源是数据库

 

 


 

Step3 pt-ioprofile定位负载来源文件

 pt-ioprofile的原理是对某个pid附加一个strace进程进行IO分析。

以下是摘自官网的一段警示:

 However, it works by attaching strace to the process using ptrace(), which will make it run very slowly until strace detaches. In addition to freezing the server, there is also some risk of the process crashing or performing badly after strace detaches from it, or indeed of strace not detaching cleanly and leaving the process in a sleeping state. As a result, this should be considered an intrusive tool, and should not be used on production servers unless you are comfortable with that.

通过ps aux|grep mysqld 找到 mysqld进程对应的进程号,通过pt-ioprofile查看哪个文件的IO占用时间最多。

默认参数下该工具展示的是IO占用的时间。

 

 对于定位问题更有用的是通过IO的吞吐量来进行定位。使用参数 --cell=sizes,该参数将结果已 B/s 的方式展示出来

 

从上图可以看出IO负载的主要来源是sbtest (sysbench的IO bound OLTP测试)。

并且压力主要集中在读取上。

 

iotop命令是专门显示硬盘IO的命令,界面风格类似top命令。这个命令只有在kernelv2.6.20及以后的版本中才有。python版本需要 python2.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.


相关文章:

  • 正则表达式之完全体验
  • 安装libpng提示--configure: error: ZLib not installed
  • WINDOWS之端口和进程查看命令
  • 3种方法轻松处理php开发中emoji表情的问题
  • linux下升级openssl到新版本
  • linux7下centos6.8版本完全编译php7.17与nginx
  • linux7下centos6.8版本完全编译php7.17与nginx --后续,配置nginx.conf与php-fpm.conf,www.conf
  • jquery将serializeArray转为可用的json对象
  • PHP用户登录后跳转回上一访问页面的实现思路及代码
  • ckeditor 的简单调用
  • centos下的中文分词coreseek-4.1的编译安装与基本配置
  • linux下php支持sphinx的扩展安装
  • sphinx增量索引和主索引来实现索引的实时更新
  • 一个可用的coreseek以及sphinx的csft.conf配置
  • PHP获取用户真实 IP , 淘宝IP接口获得ip地理位置
  • ----------
  • 10个最佳ES6特性 ES7与ES8的特性
  • 4. 路由到控制器 - Laravel从零开始教程
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • bearychat的java client
  • express.js的介绍及使用
  • Java反射-动态类加载和重新加载
  • Python进阶细节
  • vue-cli在webpack的配置文件探究
  • Vue小说阅读器(仿追书神器)
  • 阿里云购买磁盘后挂载
  • 阿里云前端周刊 - 第 26 期
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 扑朔迷离的属性和特性【彻底弄清】
  • 浅谈web中前端模板引擎的使用
  • 如何使用 JavaScript 解析 URL
  • 写给高年级小学生看的《Bash 指南》
  • 一个JAVA程序员成长之路分享
  • 06-01 点餐小程序前台界面搭建
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • !!Dom4j 学习笔记
  • #{}和${}的区别?
  • #QT(TCP网络编程-服务端)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (11)MATLAB PCA+SVM 人脸识别
  • (2022 CVPR) Unbiased Teacher v2
  • (8)STL算法之替换
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (动态规划)5. 最长回文子串 java解决
  • (二)springcloud实战之config配置中心
  • (分布式缓存)Redis持久化
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (未解决)macOS matplotlib 中文是方框
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)Windows2003安全设置/维护
  • (转)winform之ListView
  • (转)我也是一只IT小小鸟
  • **PHP分步表单提交思路(分页表单提交)
  • .describe() python_Python-Win32com-Excel