Linux常用命令学习笔记:iotop

一、命令简介

iotop命令是 Linux 系统中用于实时监控磁盘 I/O 使用情况的工具,类似于 top命令,但专注于显示进程级别的磁盘读写活动。它能够实时显示系统中每个进程或线程的磁盘 I/O 使用情况,包括读写速率、I/O 等待时间百分比等关键指标,是系统管理员诊断磁盘 I/O 性能瓶颈的重要工具。 核心特点

  • 进程级监控:精确到每个进程的磁盘 I/O 活动
  • 实时显示:动态刷新磁盘读写速率
  • 交互式界面:类似 top 命令的操作方式
  • 多维度筛选:支持按进程、用户、I/O 活动等条件过滤

二、安装方法

iotop 不是 Linux 系统默认安装的工具,需要手动安装:

# Ubuntu/Debian 系统
sudo apt-get install iotop

# CentOS/RHEL 系统
sudo yum install iotop

# Fedora 系统
sudo dnf install iotop

# Arch Linux 系统
sudo pacman -S iotop

注意:iotop 需要 root 权限才能运行,因为它需要访问内核的 I/O 统计信息。

三、基本语法

sudo iotop [选项]

权限要求:必须使用 sudo 或 root 权限执行。

四、常用选项详解

选项全称功能说明示例
-o--only只显示实际进行 I/O 操作的进程iotop -o
-b--batch非交互式模式,适合脚本中使用iotop -b
-n NUM--iter=NUM在非交互模式下运行的迭代次数iotop -n 5
-d SEC--delay=SEC设置刷新间隔时间(秒)iotop -d 2
-p PID--pid=PID只监控指定 PID 的进程iotop -p 1234
-u USER--user=USER只监控指定用户的进程iotop -u root
-P--processes只显示进程,不显示线程iotop -P
-a--accumulated显示累计 I/O 而不是带宽iotop -a
-k--kilobytes使用 KB/s 而不是 B/s 作为单位iotop -k
-t--time在输出中添加时间戳iotop -t
-q--quiet减少头部信息iotop -q
-qq全程不显示列名iotop -qq
-qqq既不显示列名,也不打印 I/O 摘要iotop -qqq

五、交互模式快捷键

在交互模式下,iotop 支持以下快捷键操作:

快捷键功能
左右箭头改变排序字段
r反向排序
o只显示活跃 I/O 进程(相当于 -o 选项)
p进程/线程显示模式切换
a累计/实时显示模式切换
q退出 iotop
i改变优先级过滤(只显示更高优先级的进程)
任意键强制刷新显示

六、输出字段解释

iotop 的输出包含以下关键字段:

字段说明
TID/PID线程 ID 或进程 ID
PRIOI/O 优先级(Linux 的 ionice 值)
USER进程所有者
DISK READ磁盘读取速度
DISK WRITE磁盘写入速度
SWAPIN交换空间使用百分比
IO>I/O 占用百分比
COMMAND进程名称

顶部摘要信息

  • Total DISK READ / Total DISK WRITE:进程和内核线程之间的总读写带宽
  • Actual DISK READ / Actual DISK WRITE:实际磁盘 I/O 带宽(对应硬件层)

七、实际应用示例

7.1 基本监控

# 启动交互式界面,显示所有进程的 I/O 活动
sudo iotop

7.2 只显示活跃 I/O 进程

# 只显示当前正在进行 I/O 操作的进程
sudo iotop -o
# 或者运行 iotop 后按 o 键

7.3 监控特定用户

# 只监控 apache 用户的进程 I/O 活动
sudo iotop -u apache

7.4 非交互模式输出

# 以非交互模式运行,每 2 秒刷新一次,共输出 3 次结果后退出
sudo iotop -b -n 3 -d 2

7.5 监控特定进程

# 只监控 PID 为 1234 的进程的 I/O 活动
sudo iotop -p 1234

7.6 记录日志到文件

# 每 10 秒记录一次 I/O 情况,共记录 5 次,结果保存到文件
sudo iotop -b -t -n 5 -d 10 > iotop_log.txt

7.7 显示累计 I/O 统计

# 显示从 iotop 启动后每个进程的累计 I/O 总量
sudo iotop -a

八、实际应用场景

8.1 识别系统变慢的原因

当系统响应变慢时,运行:

sudo iotop -o

可以快速找出哪些进程正在大量读写磁盘,导致系统 I/O 瓶颈。

8.2 监控数据库性能

对于 MySQL 等数据库服务器:

sudo iotop -u mysql -o

专门监控 mysql 用户的 I/O 活动,分析数据库的磁盘负载。

8.3 定时记录 I/O 情况

# 每 10 秒记录一次 I/O 情况,共记录 5 次,结果保存到文件
sudo iotop -b -t -n 5 -d 10 > iotop_log.txt

用于后续分析和性能优化。

九、注意事项

  1. 权限要求:iotop 需要 root 权限才能获取完整的进程 I/O 信息
  2. 内核支持:iotop 需要内核支持 I/O accounting 功能,较新的 Linux 内核通常已启用
  3. 虚拟化环境:在某些虚拟化环境中,iotop 可能无法准确报告 I/O 统计信息
  4. 性能影响:频繁刷新(如间隔小于 1 秒)可能会影响系统性能
  5. 累计统计:累计 I/O 统计(-a 选项)在系统重启后会重置
  6. SSD 设备:对于 SSD 设备,高 I/O 等待时间可能表明设备已达到性能极限

十、替代工具

如果 iotop 不可用,可以考虑以下替代方案:

  • dstat:综合性能监控工具,包含磁盘 I/O 统计
  • atop:高级系统监控工具,包含进程级 I/O 统计
  • nmon:AIX/Linux 性能监控工具
  • pidstat:sysstat 工具包的一部分,可以报告进程 I/O

十一、总结

iotop命令是 Linux 系统管理员监控磁盘 I/O 活动的强大工具,通过进程级的 I/O 监控,可以快速定位性能瓶颈。掌握 iotop 的使用方法,能够有效诊断和解决与磁盘 I/O 相关的系统性能问题。无论是日常监控还是故障排查,iotop 都是不可或缺的工具之一。


作 者:南烛
链 接:https://www.itnotes.top/archives/691
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇