这里为您整理从简单到深入的各种方法,并解释关键指标的含义。
这些工具通常需要预先安装(如sysstat
包提供了iostat
、pidstat
等),适用于大多数 Linux 发行版。
1.iostat
- 最常用的磁盘 I/O 统计工具
安装: (如果未安装)
For Ubuntu/Debian sudo apt-get install sysstat For CentOS/RHEL/Fedora sudo yum install sysstat # 或 sudo dnf install sysstat
使用:
间隔2秒刷新显示一次,共显示5次 iostat -dx 2 5
-d
显示设备(磁盘)使用状态。
-x
显示扩展的详细信息(这是关键)。
2 5
每2秒刷新一次,总共刷新5次后退出,如果只想要持续实时刷新,使用iostat -dx 2
。
关键指标解读:
Device
: 磁盘设备名(如sda
,vda
,nvme0n1
)。
r/s
,w/s
: 每秒的读/写请求数量(合并后的)。
rkB/s
,wkB/s
: 每秒读/写的数据量(以KB为单位)。
await
(非常重要): 平均每次 I/O 操作的等待时间(毫秒)。包括队列等待时间和服务时间,如果这个值很高(超过 10ms 对于 SSD 或 几十ms 对于机械硬盘),通常表示磁盘设备饱和或有瓶颈。
%util
(非常重要): 磁盘处理 I/O 的时间百分比。表示设备的繁忙程度,如果持续接近 100%,说明磁盘 I/O 已经饱和。
svctm
: 平均每次 I/O 操作的服务时间(毫秒),这个指标未来可能会被移除,通常参考await
更有意义。
aqu-sz
: 平均请求队列长度,队列越长,说明堵塞越严重。
2.iotop
- 类似 top 的按进程排序工具
可以像top
命令一样,实时查看哪些进程的 I/O 占用最高。
安装:
For Ubuntu/Debian sudo apt-get install iotop For CentOS/RHEL sudo yum install iotop
使用:
sudo iotop
必须使用sudo
权限运行。
输出分为两大部分上半部分是系统总的磁盘读写速率,下半部分是每个进程的详细 I/O 情况。
你可以按o
键只显示正在产生 I/O 的进程。
按左右箭头键可以排序,例如按IO>
可以根据读排序,按IO<
可以根据写排序。
关键指标:
IO>
: 进程的读取速率(KB/s)
IO<
: 进程的写入速率(KB/s)
SWAPIN
: 进程进行 Swap 交换的百分比
DISK READ
,DISK WRITE
: 进程的实际磁盘读写速率
3.pidstat
- 查看进程的 I/O 统计
pidstat
是sysstat
工具包的一部分,可以按进程报告 I/O 使用情况。
使用:
间隔2秒报告一次所有进程的I/O情况 pidstat -d 2
关键指标:
kB_rd/s
: 进程每秒从磁盘读取的数据量(KB)。
kB_wr/s
: 进程每秒向磁盘写入的数据量(KB)。
kB_ccwr/s
: 进程被取消的写入磁盘数据量(KB),通常发生在任务被截断时。
Linux 的/proc
目录提供了大量内核和进程的信息。
查看磁盘分区信息
cat /proc/partitions
查看磁盘 I/O 信息
cat /proc/diskstats
这里的输出字段与iostat
的数据源相同,但以原始数值呈现,需要自己计算差值。
2.vmstat
- 查看系统整体状态
vmstat
可以报告关于进程、内存、分页、块 I/O、陷阱和 CPU 活动的信息。
使用:
vmstat 2
2
表示每2秒刷新一次。
关注 I/O 相关的两列:
bi
: 每秒从块设备接收的块数(块/秒,读操作)。
bo
: 每秒发送到块设备的块数(块/秒,写操作)。
1.atop
- 功能强大的综合监控工具
atop
是一个非常强大的终端监控工具,可以记录历史数据,并能回放。
安装:
Ubuntu/Debian sudo apt-get install atop CentOS/RHEL sudo yum install atop
使用:
sudo atop
运行后,按d
键可以切换到磁盘 I/O 视图,清晰地展示每个磁盘和每个进程的 I/O 负载。
2.sar
- 系统活动报告(历史数据分析)
sar
也是sysstat
包的一部分,它用于查看历史 I/O 数据,默认情况下,sysstat
会每10分钟收集一次系统指标。
查看今天的磁盘I/O历史:
sar -d
查看指定日期的历史数据(10号):
sar -d -f /var/log/sa/sa10 # 查看10号的数据
3. 图形化工具 (Grafana + Prometheus / Netdata)
对于生产环境,建议使用图形化监控方案,它们能提供历史趋势和警报。
Prometheus + Node Exporter + Grafana: industry standard,Node Exporter 采集服务器指标(包括 I/O),Prometheus 存储,Grafana 做漂亮的图表展示。
Netdata: 一个开源的实时性能和健康监控工具,安装简单,提供极其详细和交互式的 Web 界面,对单机监控非常友好。
1、第一步:快速总体评估
* 运行iostat -dx 2
,查看%util
和await
。
* 如果%util
持续接近 100% 且await
很高,说明磁盘存在瓶颈。
2、第二步:定位罪魁祸首进程
* 运行sudo iotop
或pidstat -d 2
,找出是哪个(哪些)进程在疯狂读写磁盘。
3、第三步:深入分析
* 如果找到了高 I/O 进程,结合lsof -p <PID>
或strace -p <PID>
等命令,查看该进程正在读写哪些文件。
* 使用sar
查看历史趋势,判断问题是持续性的还是偶发性的。
4、长期监控
* 搭建 Prometheus/Grafana 或 Netdata,以便持续监控和及时告警。
高 I/O 等待(await)和高设备使用率(%util)是判断 I/O 瓶颈的最关键指标。
文章摘自:https://idc.huochengrm.cn/fwq/15725.html
评论