Skip to content

iostat 命令:IO 统计信息监控工具

1. 命令简介

iostat(Input/Output Statistics)是一个用于监控系统输入/输出设备负载的命令行工具。它报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息。iostat 是系统管理员诊断性能问题的重要工具。

2. 基本语法

iostat [选项] [<间隔时间> [<次数>]]

3. 常用选项详解

  • -c: 显示 CPU 使用情况报告
  • -d: 显示磁盘使用情况报告
  • -k: 以千字节为单位显示统计信息
  • -m: 以兆字节为单位显示统计信息
  • -x: 显示扩展统计信息
  • -p [设备 | ALL]: 显示块设备和所有分区的统计信息
  • -t: 打印每个报告的时间信息

4. 基础用法示例

显示基本 I/O 统计信息

bash
iostat

每 2 秒显示一次,共显示 5 次

bash
iostat 2 5

显示扩展磁盘统计信息

bash
iostat -xd

5. 高级用法和技巧

显示特定设备的统计信息

bash
iostat -p sda

以兆字节为单位显示扩展统计信息

bash
iostat -xm

显示 CPU 和磁盘的详细信息

bash
iostat -cd 2 10

6. 实际应用场景

监控脚本示例

bash
#!/bin/bash

LOG_FILE="/var/log/io_stats.log"
INTERVAL=300  # 5分钟
THRESHOLD=80  # 80% 利用率

while true; do
    DATE=$(date '+%Y-%m-%d %H:%M:%S')
    IO_STATS=$(iostat -x 1 1 | awk '/^sda/ {print $14}')
    
    echo "$DATE - Disk Utilization: $IO_STATS%" >> $LOG_FILE
    
    if (( $(echo "$IO_STATS > $THRESHOLD" | bc -l) )); then
        echo "$DATE - 警告: 磁盘利用率超过 $THRESHOLD%" | mail -s "高磁盘 I/O 警报" admin@example.com
    fi
    
    sleep $INTERVAL
done

7. 性能考虑

  • iostat 本身对系统性能影响较小,但频繁运行可能会增加系统负载。
  • 在高负载系统上,考虑增加报告间隔时间。
  • 对于长期监控,考虑使用专门的监控工具如 Zabbix 或 Prometheus。

8. 安全注意事项

  • iostat 不直接涉及敏感数据,但系统 I/O 信息可能被用于推断系统活动。
  • 在共享环境中使用时,要注意不要泄露敏感的系统信息。
  • 确保只有授权用户能够访问 iostat 生成的日志文件。

9. 与其他工具的集成

与 Awk 结合使用

bash
iostat -x | awk '/^sda/ {print "Disk Utilization: " $14 "%"}'

在 Shell 脚本中使用

bash
#!/bin/bash
DISK_UTIL=$(iostat -x | awk '/^sda/ {print $14}')
echo "当前磁盘利用率: $DISK_UTIL%"

10. 故障排除

  • 如果 iostat 命令不可用,确保安装了 sysstat 包。
  • 如果输出中缺少某些字段,可能是由于系统或内核版本的差异。
  • 对于不一致的数据,尝试增加采样间隔和次数以获得更准确的平均值。

11. 相关命令

  • vmstat 命令:报告虚拟内存统计信息
  • sar 命令:收集、报告和保存系统活动信息
  • top 命令:实时显示系统进程和资源使用情况
  • dstat 命令:系统资源统计信息的多功能替代工具