Linux 利用 iostat 和 iotop 进行 IO 分析

news2025/1/10 20:43:05

目录

  • 一、概述
  • 二、iostat
    • 1、下载
    • 2、常用选项
    • 3、/proc/diskstats 文件
    • 3、一般使用
  • 三、iostop
    • 1、下载
    • 2、常用选项
    • 3、一般使用


一、概述

在Linux 系统上,iostatiotop 这两个 IO 数据工具非常常用。它们都是性能分析领域中不可缺少的工具性软件。

如果 Linux 系统性能变慢,我们会用 top 命令 来查看系统性能。它被用来检查是什么进程在服务器上占有如此高的使用率,对于大多数 Linux 系统管理员来说很常见,现实世界中被 Linux 系统管理员广泛采用。

如果在进程输出中你没有看到很大的不同,你仍然有选择查看其他东西。比如你可以在 top 输出中检查 wa 状态,因为大多数时间里服务器性能由于在硬盘上的高 I/O 读和写降低了性能。如果它很高或者波动,很可能就是它造成的。因此,我们需要检查硬盘上的 I/O 活动。

我们可以在 Linux 中使用 iotopiostat 命令监控所有的磁盘和文件系统的磁盘 I/O 统计。

二、iostat

1、下载

iostat 工具是 sysstat 包的一部分,所以我们可以轻松地在包管理器地帮助下安装,因为在所有的 Linux 发行版的仓库都是可以获得的。

对于 Fedora 系统,使用 DNF Command 来安装 sysstat。

$ sudo dnf install sysstat

对于 Debian/Ubuntu 系统,使用 APT-GET Command 或者 APT Command 来安装 sysstat。

$ sudo apt install sysstat

对于基于 Arch Linux 的系统,使用 Pacman Command 来安装 sysstat。

$ sudo pacman -S sysstat

对于 RHEL/CentOS 系统,使用 YUM Command 来安装 sysstat。

$ sudo yum install sysstat

对于 openSUSE Leap 系统,使用 Zypper Command 来安装 sysstat。

$ sudo zypper install sysstat

2、常用选项

iostat 命令,是用来展示系统中的 IO 设备和 CPU 使用情况的。它的最大优势在于能汇报所有块设备活动的统计情况,同时也能汇报出 CPU 使用情况。但是 iostat 命令有一个缺陷,就是它不能对每个应用程序进程进行深入分析,只能分析系统的整体情况。

我们先来看 iostat 如何使用,它的使用形式如下:

iostat [选项] [ <时间间隔> [ <次数> ] ]

下面是一些常用选项:

  • -c:仅显示CPU使用情况
  • -d [设备名]:查看具体设备和它的分区的 I/O 统计信息,不加设备名则是查看所有设备的 I/O 统计
  • -k:显示状态以千字节每秒为单位,而不使用块每秒
  • -m:显示状态以兆字节每秒为单位
  • -N:查看 LVM 磁盘 I/O 统计报告
  • -p:仅显示块设备和所有被使用的其他分区的状态
  • -t:显示每个报告产生时的时间
  • -V:显示版号并退出
  • -x:显示所有设备的详细的 I/O 统计信息

输出内容:

  • Device:设备名称,或者分区名称
  • r/s:每秒实际读取请求的数量
  • w/s:每秒实际写入请求的数量
  • rMB/s:每秒实际读取的大小,单位为MB
  • wMB/s:每秒实际写入的大小,单位为MB
  • rrqm/s:每秒合并的读取请求数量
  • wrqm/s:每秒合并的读取请求数量
  • %rrqm:合并读取请求的百分比
  • %wrqm:合并写入请求的百分比
  • r_await:读取请求处理完成等待时间(单位是毫秒)
  • w_await:写入请求处理完成等待时间(单位是毫秒)
  • aqu-sz:平均请求队列长度
  • rareq-sz:读取请求的平均大小(单位为KB)
  • wareq-sz:写入请求的平均大小(单位为KB)
  • svctm处理IO请求所需的平均时间(不包括等待时间,单位是毫秒)
  • %util磁盘处理IO请求的时间百分比

有了这些量化数据,我们就能判断每个硬盘分区的 IO 使用情况,从而分析出哪个设备占用 IO 请求量高或者低、占用时间多少、读取或者写入的数据量有多少。这样,性能瓶颈出现在哪个设备上,我们心中就有数了。

3、/proc/diskstats 文件

iostat 命令的数据来源,主要的数据来源是 /proc/diskstats 文件,它记录着块设备 IO 操作的全部统计信息。

下面来看一下这个文件的数据结构,它的每一行代表一个块设备或者块设备的分区,总共 20 列数据,每一列的内容如下:

序号内容
1主设备号
2次设备号
3设备名
4已读取IO请求数量
5读取的合并IO请求数量
6读取的扇区数
7读取IO请求的总等待时间(毫秒)
8已写入IO请求数量
9写入的合并IO请求数量
10写入的扇区数
11写入IO请求的总等待时间(毫秒)
12加权的IO请求数量
13此块设备活动的总时间(毫秒)
14队列中所有IO请求的总等待时间(毫秒)
15已丢弃IO请求数量
16丢弃的合并IO请求数量
17丢弃的扇区数
18丢弃IO请求的总等待时间(毫秒)
19已刷新的IO请求数
20刷新IO请求的总等待时间(毫秒)

Linux 块设备层在处理每个 IO 请求的时候,都会更新这些数据。iostat 只使用了其中部分数据。由于这些数据是线性增加的,iostat 只需要经过多次采集,进行简单的运算就可以了。

iostat 只是负责的工作其实很简单,就是采集数据并计算显示。我们通过一段时间的 IO 请求数据、写入和读取的数据量、IO 请求等待时间等等这些数据,就可以评估一个设备的 IO 性能了。

3、一般使用

  1. 不加参数会看到完整的信息


2. 查看所有设备的 I/O 统计


加上设备名可以看到指定的设备 IO 信息:

在这里插入图片描述

  1. 查看所有的设备和分区的 I/O 统计

在这里插入图片描述4. 显示所有设备的详细的 I/O 统计信息


5.

三、iostop

使用时需要 root 权限

1、下载

对于 Fedora 系统,使用 DNF 命令 来安装 iotop。

$ sudo dnf install iotop

对于 Debian/Ubuntu 系统,使用 API-GET 命令 或者 APT 命令 来安装 iotop。

$ sudo apt install iotop

对于基于 Arch Linux 的系统,使用 Pacman Command 来安装 iotop。

$ sudo pacman -S iotop

对于 RHEL/CentOS 的系统,使用 YUM Command 来安装 iotop。

$ sudo yum install iotop

对于使用 openSUSE Leap 的系统,使用 Zypper Command 来安装 iotop。

$ sudo zypper install iotop

2、常用选项

上面的 iostat 工具,只能收集量化到每个块设备的读写情况,但如果我们想知道每个进程是如何使用 IO 的就做不到,这就要用到 iotop 命令了。

iotop 命令是一个 top 类工具,可以监视磁盘 I/O 使用状况,还可以作为 iostat 的升级工具使用。iotop 命令具有与 Linux 系统自带的 top 相似的 Ul,只是 top 更关注进程,而 iotop 更关注 IO。

iotop 命令它是使用 Python 语言编写而成,需要用 Python2.5 以上的版本和 Linux 内核 2.6以上的版本。iotop 提供了源代码和二进制软件包,可以自己选择安装。在前面已经说明了如何安装 ,iotop

iostat 一样,我们一起看看 iotop 如何使用,它的使用形式如下:

iotop [选项]

下面是一些常用选项:

  • -a:以累计方式显示信息,数据从 iotop 命令启动开始做计算
  • -o:只显示有 IO 操作的进程
  • -b:批量显示,无交互,主要用作记录到文件
  • -n NUM:NUM 是数字,显示(NUM)次,主要用于非交互式模式
  • -d SEC:SEC 是秒数,间隔(SEC)秒显示一次
  • -p PID:PID 是进程 id,监控 id 等于 PID 的进程、
  • -q:列名称只在第一次迭代时打印
  • -qq:列名称从不打印
  • -qqq:不打印 IO 摘要
  • -u USER:USER 是用户名,监控用户等于 USER 的进程
  • -t:增加时间戳列

输出内容:

  • PID:进程的 id
  • PRIO:进程优先级
  • USER:进程的所属用户
  • DISK READ:进程每秒读取硬盘的数据量
  • DISK WRITE:进程每秒写入硬盘的数据量
  • SWAPIN:swap 交换百分比
  • IO:等待 IO 百分比
  • COMMAND:进程对应的应用程序文件

有了这些量化数据,我们就能判断哪些进程是 IO 型进程,哪些进程是计算型进程,每个进程的访问 IO 的数据一目了然。

根据这些数据,我们还能进一步分析出哪个进程使用 IO 的量是高或者低、占用时间多少、进程优先级多少。IO 性能瓶颈出现在哪个进程上,需要优化哪个进程的 IO 模型,我们心中就有底了。

3、一般使用

  1. iotop
root:~# iotop


2. 以累计方式显示信息

root:~# iotop -a


3. 利用重定向连续记录一段时间的信息

root:~# iotop -b > iotop.txt
^C
root@projectsauron:~# vim iotop.txt


4. 2s 剧新 1 次,刷新三次信息后结束

root:~# iotop -d 2 -n 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Redis的集群面试题

问题一&#xff1a;Redis的多数据库机制&#xff0c;了解多少&#xff1f; Redis支持多个数据库&#xff0c;并且每个数据库是隔离的不能共享&#xff0c;单机下的redis可以支持16个数据库&#xff08;db0~db15&#xff09;;若在Redis Cluster集群架构下&#xff0c;则只有一个…

基于STM32F103的FreeRTOS系列(七)·任务创建·列表的使用超详细解析

目录 1. 列表和列表项 1.1 列表和列表项简介 1.1.1 列表 1.1.2 列表项 1.1.3 迷你列表项 1.1.4 列表与列表项关系图 1.2 列表初始化 1.3 列表项的初始化 1.4 列表项的插入函数 1.5 列表项的末尾插入 1.6 列表项的删除 1.7 列表的遍历 1. 列表和列表项…

Open3D 三维重建-Marching Cubes (行进立方体)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1步骤 2.1.2函数代码 2.2完整代码 三、实现效果 3.1原始点云 3.2重建后点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#…

基于Flask框架的豆瓣电影实时数据分析可视化系统【自动爬虫、数据库、Pyecharts】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍数据抓取数据存储可视化前后端交互登陆界面注册界面数据更新后展示每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本项目基于Py…

JavaEE: 线程安全问题的解决方案(synchronized)

发生原因 要想解决线程安全问题,那么我们首先得知道线程安全问题为什么会发生. 发生原因: 线程在操作系统中是"随机调度,抢占式执行的"[根本原因].多个线程,同时修改同一个变量修改操作不是"原子"的内存可见性问题指令重排序 解决方案 原因1和2,我们很…

基于YOLOv8的茶叶病变检测系统

基于YOLOv8的茶叶病变检测系统 (价格85) 包含 [Algal Leaf Spot, Brown Blight, Gray Blight, Healthy, Helopeltis, Red Leaf Spot] 6个类 翻译&#xff1a; [藻类叶斑病&#xff0c;褐疫病&#xff0c;灰疫病&#xff0c;健康&#xff0c;茶角盲蝽&#xff0c; 红叶斑…

08.SQL注入-下(超详细!!!)

1、Access注入 1.1 判断是否存在注入漏洞 ?id10 and 11 //不报错 ?id10 and 12 //报错1.2 判断字段数 ?id10 order by 1 ... ?id10 order by 7 //不报错 ?id10 order by 8 //报错 说明有7个字段1.3 猜表名 ?id10 and exists(select * from administrator) …

IP协议解析

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

C语言宏定义的使用

文章目录 &#x1f34a;自我介绍&#x1f34a;宏定义&#x1f34a;宏函数&#x1f34a;嵌入式开发常用do...while(0)&#x1f34a;字符串化运算符 ‘ # ’&#x1f34a;不定参数宏 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xf…

SQL报错注入之floor

目录 1.简述 2.关键函数说明 1.rand函数 2.floor&#xff08;rand&#xff08;0&#xff09;*2&#xff09;函数 3.group by 函数 4.count&#xff08;*&#xff09;函数 3.报错分析 4.报错流程 4.1寻找注入点 4.2爆数据库名 4.3爆表名 4.4爆字段名 4.5查询数据 1.…

32、Python之面向对象:对象的表示,再论Python是dict包括语法糖

引言 在前面介绍Python容器的时候&#xff0c;我们曾经用过这种夸张的表述&#xff0c;“Python就是包裹在一堆语法糖中的字典”。虽然夸张&#xff0c;其实更多的是为了突出Python中dict的强大之处。今天这篇文章&#xff0c;打算看下Python中类对象、实例对象的表示及内存管理…

甄选范文“论负载均衡技术在Web系统中的应用”软考高级论文系统架构设计师论文

论文真题 负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术, 可将负载(工作任务) 进行平衡、分摊到多个操作单元上执行, 从而协同完成工作任务, 达到提升Web系统性能的目的。 请围绕“负载均衡技术在Web系统中的应用”论题, 依次从以下三个方面进行论述。 1.…

自动化测试 — selenium + Java

什么是自动化测试 将人为驱动的测试行为转化为机器执行的过程。 自动化测试包括UI 自动化&#xff0c;接口自动化&#xff0c;单元测试自动化。按照这个金字塔模型来进行自动化测试规划&#xff0c;可以产生最佳的自贡话测试产出投入比&#xff08;ROI &#xff09;&#xff0c…

智能氮气柜如何为存储应用提供稳定和安全的环境?

智能氮气柜在保持内部环境的严格控制下&#xff0c;如何为各类高要求的存储应用提供一个稳定和安全的环境&#xff1f; 智能氮气柜内部安装高精度温湿度传感器&#xff0c;持续监测内部环境状况。通过外部连接的氮气供应源&#xff0c;向柜内注入高纯度氮气&#xff0c;当检测到…

k8s—ingress应用

一、ingress和ingress-controller ingress对象&#xff1a; 指的是k8s中的⼀个api对象/资源对象&#xff0c;⼀般⽤yaml配置。作⽤是定义请求如何转发到service的规则&#xff0c;可以理解为配置模板。 ingress-controller&#xff1a; 具体实现反向代理及负载均衡的程序&…

IO-Link通信笔记(十七)——可任意MCU平台移植的面向对象程序设计的IO-Link从站协议栈与接口代码生成和监控上位机与便携式通信主站

一、可任意MCU平台移植的面向对象程序设计的IO-Link从站协议栈 图形化界面与驱动代码库生成功能&#xff0c;是现如今几大半导体芯片供应商选择向广大开发人员推荐的主流开发方式&#xff0c;例如意法的cube-mx。开发人员可以通过这些软件针对所使用芯片的相关外设资源&#xf…

缺失值处理方法:代数/统计/机器学习算法补全数据(附Python-sklearn代码精美可视化绘图)

注&#xff1a;本期的删除或插补方法主要针对连续数据&#xff0c;时间序列数据的插补在后续关于时间序列的博客中讲明。参考鸢尾花丛书&#xff0c;链接如下&#xff1a; 参考书籍及源代码链接https://github.com/Visualize-ML 博客是选出自己感觉用的到的精炼部分加自己的理…

春秋云境 | 文件上传 | CVE-2022-30887

目录 靶标介绍 开启靶场 上传一句话木马 蚁剑连接 找到 flag 靶标介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0…

eclipse无法使用jdk1.6编译老项目

主要修改两个地方的配置&#xff1a; 1、eclipse中配置的maven版本不能过高&#xff0c;亲测3.2.5版本是好使的。 2、修改eclipse安装目录下的eclipse.ini文件&#xff0c;将其中的-Dosgi.requiredJavaVersion更改为1.6即可&#xff0c;我得默认是1.7 最后附上maven安装包&…

AGV一体式ARM智能控制主机如何替代传统PLC、工控机等方案

工业自动化的不断发展&#xff0c;AGV&#xff08;自动导引车&#xff09;作为一种重要的物流搬运设备&#xff0c;在各个领域得到了广泛的应用。而 AGV 的控制主机是其核心部件之一&#xff0c;直接影响着 AGV 的性能和稳定性。传统的 AGV 控制主机通常采用 x86 工控机交换机i…