Linux 系统 I/O 监控命令大全

Linux 系统 I/O 监控命令大全

命令 主要功能 监控维度 实时性 优势 劣势
iostat 磁盘I/O性能统计 块设备级 (如sda) 周期性快照 提供详细的设备级性能指标(await, %util等) 看不到具体的进程
iotop 进程I/O监控 进程级 实时 直观显示哪个进程读写磁盘最频繁 需要root权限,看不到设备级详细指标
vmstat 系统资源综合报告 系统级 (bi/bo) 周期性快照 快速查看系统整体I/O压力 I/O信息较为粗略,只有块计数
dstat 多功能资源监控 系统级/设备级 实时 功能强大,输出颜色丰富易读 信息不如专用工具深入
ioping 磁盘I/O延迟测试 设备/文件级 一次性/周期性 专门测试磁盘响应速度,非常精准 不提供吞吐量或进程信息
lsof 列出打开文件 文件/进程级 瞬时快照 排查具体文件被谁占用或访问 不提供性能数据(速率、延迟)
pidstat 进程资源统计 进程级 周期性快照 可记录历史数据,适合长时间监控 实时性不如iotop
/proc 内核数据接口 所有维度 瞬时快照 最底层的数据源,信息最全面 原始数据,需要自行解析,不友好

命令详解、示例与输出解析

1. iostat (来自 sysstat 包)

功能 :提供系统级和块设备级的 CPU 和 I/O 性能统计。
安装sudo apt install sysstatsudo yum install sysstat

命令示例

每隔2秒报告一次扩展统计信息(共3次),以MB/s为单位

iostat -x -m 2 3

样例输出与解析

sh 复制代码
Linux 5.15.0-86-generic (ubuntu-server) 	12/30/2025 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          4.21    0.01    1.35    0.21    0.00   94.22  # <- CPU统计。`%iowait`是关键,表示CPU等待I/O的时间百分比。

Device            r/s     w/s     rMB/s     wMB/s   await aqu-sz  %util
sda              3.52   20.66      0.04      0.16    5.85   0.14   2.42  # <- 设备sda的详细指标
nvme0n1          0.00    0.00      0.00      0.00    0.00   0.00   0.00
  • r/s, w/s:每秒读/写请求次数(IOPS)。
  • rMB/s, wMB/s:每秒读/写的数据量(吞吐量)。
  • await :平均每次I/O请求的等待时间(ms),衡量磁盘响应速度
  • %util :设备带宽利用率百分比,最直接的磁盘繁忙度指标,接近100%表示饱和。

2. iotop

功能 :类似 top,但实时监控每个进程的磁盘I/O使用情况。
安装sudo apt install iotopsudo yum install iotop

命令示例

以root权限运行,只显示正在产生I/O的进程,单位KB/s

sudo iotop -o -P -k

样例输出与解析

sh 复制代码
Total DISK READ: 0.00 K/s | Total DISK WRITE: 28.65 K/s  # <- 系统总计I/O
Current DISK READ: 0.00 K/s | Current DISK WRITE: 28.65 K/s
 PRIO  USER     PID   DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 be/4 root       123       0.00 K/s  28.65 K/s  0.00 %  0.21 % [jbd2/sda1-8] # <- 进程级I/O详情
 be/4 mysql     456       0.00 K/s   5.21 K/s  0.00 %  0.05 % mysqld
  • DISK READ, DISK WRITE :该进程的实时读写速率,直接定位高I/O进程
  • IO>:该进程I/O操作占用的CPU时间百分比。

3. vmstat

功能:报告进程、内存、分页、块I/O、中断和CPU活动的综合信息。

命令示例

每隔1秒报告一次,共报告5次

vmstat 1 5

样例输出与解析

sh 复制代码
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
1  0      0 2468124 150432 3123456    0    0     5    23  101  156  4  1 95  0  0
  • bi (Blocks in):每秒从块设备读取的块数。bi * block size ≈ 读速率。
  • bo (Blocks out):每秒向块设备写入的块数。bo * block size ≈ 写速率。
  • wa (CPU wait):CPU等待I/O的时间百分比,与 iostat%iowait 同义。

4. dstat

功能 :多功能替代工具,可同时查看CPU、磁盘、网络、内存等资源。
安装sudo apt install dstatsudo yum install dstat

命令示例

查看CPU、磁盘吞吐、负载、磁盘利用率和IOPS,每秒更新

dstat -cdl --disk-util --disk-tps 1

样例输出与解析

sh 复制代码
--total-cpu-usage-- -dsk/total- --load-avg- ---disk-util--- ---disk-tps---
usr sys idl wai stl| read  writ| 1m   5m  15m| sda  nvme0n1| sda  nvme0n1
4   2  94   0   0|  12k   65k| 0.1  0.2  0.3| 2.1   0.0   |  15     0
  • dsk/total:系统总计读写流量。
  • disk-util:按设备显示的利用率(%)。
  • disk-tps:按设备显示的IOPS。

5. ioping

功能 :像网络ping一样测试磁盘的I/O延迟。
安装sudo apt install iopingsudo yum install ioping

命令示例

向设备/dev/sda1发送10次4KiB请求,测试其延迟

sudo ioping -c 10 /dev/sda1

样例输出与解析

sh 复制代码
4 KiB from /dev/sda1 (dev: 8,1): request=1 time=1.20 ms # <- 每次请求的延迟
...
--- /dev/sda1 (dev: 8,1) ioping statistics ---
10 requests completed in 9.10 ms, 40 KiB read, 1.10 k iops, 4.29 MiB/s
min/avg/max/mdev = 0.94 ms / 0.91 ms / 1.20 ms / 0.08 ms # <- 延迟统计数据 
  • min/avg/max/mdev最小/平均/最大/标准偏差延迟,是衡量磁盘响应速度的核心指标(SSD<1ms,HDD数ms)。

6. lsof

功能:列出当前系统打开的文件列表,用于排查文件占用。

命令示例

查看谁正在使用/var/log/syslog文件

sudo lsof /var/log/syslog

样例输出与解析

sh 复制代码
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 789 syslog 1w   REG  8,1    1234567   1234 /var/log/syslog # <- 以写模式打开
tail     901 root    4r   REG  8,1     98765   1234 /var/log/syslog # <- 以读模式打开
  • 输出表明rsyslogd 进程正在写入(w)该文件,tail 命令正在读取(r)它。用于解决"文件被占用"问题。

7. pidstat (来自 sysstat 包)

功能:监控单个进程或任务的资源统计,包括I/O。

命令示例

监控PID为456的进程的I/O情况,每2秒一次,共5次

pidstat -d -p 456 2 5

样例输出与解析

sh 复制代码
03:15:00 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
03:15:02 PM   112       456      0.00     512.66      0.00     123  mysqld
  • kB_rd/s, kB_wr/s:进程每秒读/写的数据量(KB)。
  • iodelayI/O延迟,进程等待I/O的时钟滴答数,值越大表示该进程受I/O阻塞越严重。

8. /proc 文件系统

功能:提供内核数据的接口,是许多监控工具的数据来源。

命令示例

查看内核提供的原始磁盘统计信息

cat /proc/diskstats

查看PID为1的进程的I/O计数器

cat /proc/1/io

样例输出与解析

sh 复制代码
  8       0 sda 123 456 7890 123 456 7890 0 0 0 321 456  # <- 原始设备数据,各列含义需查手册
rchar: 1234567
wchar: 987654
read_bytes: 4096000
write_bytes: 2048000
  • /proc/diskstatsiostat 的数据源,需解析,不直观。
  • /proc/[pid]/io:显示进程生命周期内累积的I/O字节数,非常详细但非实时速率。

总结:

  • 快速定位高I/O进程sudo iotop -o
  • 深入分析磁盘性能瓶颈iostat -x 1 (看 %util, await)
  • 综合系统负载视图dstat -cdlvmstat 1
  • 测试磁盘延迟(性能基准)sudo ioping -c 10 /dev/sda1
  • 解决"文件已打开"错误sudo lsof /path/to/file
  • 监控特定进程的I/O历史pidstat -d -p <PID> 1
  • 获取最底层原始数据 :查阅 /proc/diskstats/proc/<pid>/io
相关推荐
凯子坚持 c2 小时前
Qt常用控件指南(1)
开发语言·数据库·qt
___波子 Pro Max.2 小时前
Linux下的posix_spawn接口使用场景及与fork区别
linux
oMcLin2 小时前
Linux 系统服务器的 KVM 虚拟化实战:搭建、配置与管理
linux·运维·服务器
Jtti2 小时前
服务器拒绝执行用户请求怎么办?
运维·服务器
秋4272 小时前
tomcat与web服务器
服务器·前端·tomcat
吉普赛的歌2 小时前
【服务器】Windows Server如何配置一个账号多个用户可以远程登录
运维·服务器·windows
飞Link2 小时前
【Hive】Linux(CentOS7)下安装Hive教程
大数据·linux·数据仓库·hive·hadoop
Evand J2 小时前
【信号处理MATLAB例程】小波变换执行边缘检测、突变点识别和去噪功能。附代码下载链接
数据库·matlab·信号处理
TPBoreas2 小时前
清理服务器日志空间
linux·运维·服务器