在Linux系统中,监控和分析I/O(输入/输出)性能是系统管理和性能调优的重要环节,I/O性能问题可能导致系统响应缓慢、应用卡顿甚至服务中断,通过合适的命令,管理员可以实时或历史地查看磁盘、文件系统、进程等层级的I/O活动,从而定位瓶颈并进行优化,以下是常用的Linux查看I/O命令及其详细用法,涵盖从基础到高级的场景。

基础I/O监控命令
iostat - 查看CPU及设备I/O统计
iostat是sysstat包的一部分,用于报告CPU利用率及磁盘I/O统计信息,安装后可通过iostat [选项] [间隔] [次数]调用。
常用选项:
-x:显示扩展统计,包括await、svctm、util等关键指标。-d:仅显示磁盘统计信息。-k:以KB/s为单位显示传输速率(默认为块/秒)。-p [设备名]:指定特定磁盘(如iostat -x sda)。
示例输出:
avg-cpu: %user %nice %system %iowait %steal %idle
5.23 0.15 3.87 2.10 0.00 88.65
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 12.3 8.7 45.6 32.1 512.3 256.7 12.34 0.45 5.23 2.10 5.67
关键指标解释:

await:I/O请求平均等待时间(毫秒),过高可能表明磁盘瓶颈。%util:磁盘利用率,持续高于70%可能意味着磁盘成为瓶颈。svctm:平均服务时间,若与await差距大,说明队列等待严重。
vmstat - 虚拟内存与I/O统计
vmstat报告进程、内存、分页、块I/O等统计信息,其中bo(块输出)和bi(块输入)列可反映磁盘I/O情况。
示例:
vmstat 1
输出中bi和bo列表示每秒读取和写入的块数,若持续高位需关注磁盘负载。
dstat - 多资源统计工具
dstat是功能强大的通用统计工具,可通过插件监控I/O。

示例:
dstat -d --disk-util # 显示磁盘使用率和I/O
输出包括磁盘读写速率、利用率等,适合快速概览。
高级I/O分析工具
iotop - 实时进程级I/O监控
iotop类似top,但专注于实时显示每个进程的I/O读写速率。
安装与使用:
sudo apt install iotop # Debian/Ubuntu sudo iotop -o # 仅显示有I/O活动的进程
输出中DISK READ和DISK WRITE列可直观看到进程的I/O负载,适合定位高I/O进程。
pidstat - 进程级I/O统计
pidstat是sysstat包的一部分,可按进程查看I/O统计。
示例:
pidstat -d -p <PID> 1 # 监控特定进程的I/O
输出包括kB_rd/s(读取速率)、kB_wr/s(写入速率)等。
nmon - 系统性能监控器
nmon(Nigel's Monitor)是交互式工具,可同时监控CPU、内存、磁盘、网络等。
使用:
nmon
进入界面后按d查看磁盘I/O,按c查看CPU,适合综合分析。
ioping - 类似ping的磁盘延迟测试
ioping用于测试磁盘延迟,类似网络ping的原理。
安装与使用:
sudo apt install ioping ioping -c 4 / # 测试根分区延迟
输出显示平均延迟、最小/最大延迟,适合快速评估磁盘响应速度。
文件系统与磁盘健康检查
df - 文件系统磁盘使用情况
df报告文件系统的磁盘空间使用情况,-h选项以人类可读格式显示。
示例:
df -h
输出包括已用空间、可用空间、挂载点,若某个分区使用率接近100%,可能导致I/O性能下降。
du - 目录磁盘使用量
du用于统计目录或文件的磁盘占用,-sh选项显示总大小。
示例:
du -sh /var/log
smartctl - 磁盘健康监控
smartctl来自smartmontools包,用于监控SATA/SCSI磁盘的健康状态。
示例:
sudo smartctl -a /dev/sda # 显示磁盘详细信息
关注Reallocated_Sector_Ct(重定位扇区数)等指标,数值异常可能预示磁盘故障。
I/O性能调优建议
- 优化磁盘调度算法:通过
echo noop | sudo tee /sys/block/sda/queue/scheduler调整调度器(noop、deadline、mq-deadline)。 - 文件系统选择:对高并发场景考虑
XFS或ext4,禁用atime(noatime挂载选项)。 - RAID配置:使用RAID 0提升性能(无冗余)或RAID 1/10兼顾性能与安全。
- 分散I/O负载:将高I/O应用数据分散到不同物理磁盘。
相关问答FAQs
Q1: 如何判断磁盘I/O是否成为系统瓶颈?
A1: 通过以下指标综合判断:
iostat -x中%util持续高于70%;await值远高于磁盘平均寻道时间(如机械硬盘>10ms,SSD<2ms);vmstat中bo/bi列长期处于高位,且系统wa(I/O等待)占比高。
若满足以上条件,可考虑升级磁盘、优化应用或调整调度策略。
Q2: 如何定位高I/O消耗的进程?
A2: 可通过以下步骤定位:
- 使用
iotop -o实时查看进程I/O; - 使用
pidstat -d按PID筛选可疑进程; - 若为数据库等应用,检查慢查询或未优化的SQL;
- 通过
strace -p <PID> -e trace=write跟踪系统调用,确认具体I/O操作。
必要时使用ionice调整进程I/O优先级(如sudo ionice -c 3 -p <PID>降低优先级)。
