Linux Linux运维topiotopI/O性能监控

Linux top 与 iotop 指标说明及 I/O 监控指南

| 6 分钟阅读 | --

前言

排查 Linux 服务器卡顿时,通常会先打开 top 看系统整体状态:负载高不高、CPU 是否打满、内存是否紧张、哪个进程最活跃。

如果 top 里 CPU 和内存都不算异常,但机器仍然响应很慢,就要进一步怀疑磁盘 I/O。iostatnmon 这类工具偏向从磁盘或设备维度看读写情况;如果想定位具体是哪个进程在读写磁盘,就可以使用 iotop

简单来说:

工具适合回答的问题
top当前系统是否忙?忙在 CPU、内存还是进程状态?
iotop哪个进程正在产生磁盘 I/O?读写速率是多少?

一、先用 top 判断系统状态

top 的进程列表会展示每个进程的身份、调度、内存、CPU 等信息。字段很多,排查时可以按下面几类理解。

进程身份

指示符含义
PID进程 ID
USER进程所有者
COMMAND进程名称或命令行

这几个字段用来回答“这个进程是谁”。定位到异常进程后,通常会继续结合 ps -fp <PID>、业务日志或启动命令确认它属于哪个服务。

调度与状态

指示符含义
PR进程调度优先级
NInice 值。负值表示优先级更高,正值表示优先级更低
S进程状态。常见值:D 不可中断睡眠,R 运行,S 睡眠,T 停止或被跟踪,Z 僵尸进程

重点关注 S 字段:

  • R 多:说明有不少进程正在运行或等待 CPU。
  • D 多:常见于磁盘 I/O、网络文件系统等不可中断等待场景。
  • Z 出现:说明存在僵尸进程,需要检查父进程是否正常回收子进程。

内存相关

指示符含义
VIRT进程使用的虚拟内存总量,通常包含代码、数据、共享库、映射文件以及已换出的内存等
RES进程当前占用的、未被换出的物理内存大小
SHR可能与其他进程共享的内存大小
%MEM进程使用的物理内存占系统总物理内存的百分比

注意:VIRTRES 不适合简单理解为“真实占用内存”。排查内存问题时,通常需要结合 %MEMRES、进程类型以及 /procpmap 等信息一起判断。

CPU 相关

指示符含义
%CPU从上次刷新到当前刷新间隔内,该进程占用的 CPU 百分比
TIME+进程累计使用的 CPU 时间,精度通常到 1/100 秒

%CPU 适合看当前谁最忙,TIME+ 适合看进程从启动到现在累计消耗了多少 CPU 时间。如果某个进程 %CPU 长时间居高不下,就要结合线程、日志或性能分析工具继续定位。


二、再用 iotop 定位磁盘 I/O

top 中出现较多 D 状态进程,或者系统负载高但 CPU 并不高时,可以进一步使用 iotop 看磁盘 I/O 来源。

安装 iotop

CentOS / RHEL:

yum install iotop -y

Fedora / CentOS Stream / RHEL 8+:

dnf install iotop -y

Ubuntu / Debian:

apt install iotop -y

提示:iotop 通常需要 root 权限才能读取完整的进程 I/O 信息。


三、iotop 常用场景

场景 1:只看正在产生 I/O 的进程

iotop -o

-o 会过滤掉当前没有实际 I/O 的进程,排查磁盘读写抖动时非常常用。

场景 2:按进程维度聚合

iotop -P

默认情况下,iotop 可能按线程展示;加上 -P 后只显示进程,更适合快速定位业务进程。

场景 3:采样并保留现场

iotop -b -n 5 -d 1

含义:

参数含义
-bbatch 模式,适合脚本或日志采集
-n 5输出 5 次后退出
-d 1每 1 秒刷新一次

四、iotop 参数速查

短参数长参数含义
--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 启动以来每个进程或线程累计完成的 I/O 总量
-k--kilobytes以 KB 为单位显示数值
-t--time在每一行前添加当前时间

五、推荐排查流程

遇到“服务器变慢、命令卡顿、服务响应抖动”这类问题时,可以按下面的顺序走:

  1. 先用 top 查看系统整体负载,以及是否存在明显 CPU 或内存异常。
  2. 观察 top 里的进程状态。如果 D 状态较多,优先怀疑 I/O 等待。
  3. 使用 iotop -o 观察正在产生 I/O 的进程。
  4. 如果输出过多,使用 iotop -P 聚合到进程维度。
  5. 如果问题是间歇性出现,使用 iotop -b -n 10 -d 1 采样并保存输出。
  6. 定位进程后,再结合业务日志、进程启动参数和磁盘使用情况继续分析。

日常排查中,top 适合看系统和进程总体状态,iotop 则适合追踪磁盘 I/O 来源。两者配合使用,可以更快判断问题到底来自 CPU、内存还是磁盘读写。