如何通过Linux命令测量磁盘活动?
如何通过Linux命令测量磁盘活动?
2025-03-11 00:09
一、实时监控工具集 1. iostat (瞬时I/O统计) 所属软件包:sysstat 安装命令:
一、实时监控工具集
1. iostat (瞬时I/O统计)
所属软件包:sysstat
安装命令:
yum install sysstat -y # CentOS/RHEL
apt-get install sysstat # Debian/Ubuntu
黄金参数组合:
iostat -dx 2 5 # 参数释义:
# -d : 仅显示磁盘统计
# -x : 扩展详情模式
# 2 : 每2秒刷新
# 5 : 输出5次后退出
关键指标解读:
字段 | 警戒值参考 | 物理意义 |
---|---|---|
%util | ≥70% | 设备带宽利用率(百分比) |
await | >30ms | I/O平均等待时间(毫秒) |
svctm | >20ms | 实际I/O服务时间(毫秒) |
典型异常场景:
当 %util
长期高于90%且 await
显著上升,表明磁盘进入排队拥堵状态
2. iotop (进程级追踪)
安装方式:
yum install iotop -y # RHEL系
apt-get install iotop # Debian系
交互式监控:
iotop -oPa # 过滤参数说明:
# -o : 仅显示活跃I/O进程
# -P : 不合并线程
# -a : 累计统计模式
输出列说明:
- DISK READ/WRITE:进程读写速率(KB/s)
- SWAPIN:交换空间使用占比
- IO>:当前I/O优先级(△表示高优先)
二、复合型资源分析工具
3. vmstat (多维资源概览)
磁盘相关字段监测:
vmstat -d 1 # 每1秒刷新块设备统计(无需root权限)
输出关键项:
- bio:块设备每秒读写次数
- bo:每秒写操作数据块数
- bi:每秒读操作数据块数
价值点:快速判断是否存在突发性I/O尖峰
4. dstat (可视化流量监控)
独特优势:实时显示磁盘吞吐速率
dstat -tdD sda,sdb 1 # 参数详解:
# -t : 增加时间戳
# -d : 启用磁盘统计
# -D : 指定设备(sda/sdb)
# 1 : 1秒刷新间隔
动态显示字段:
- read/write:当前读写速率(单位:MB/s)
- dsk/cpu:磁盘与CPU的联动占比图
三、深度分析工具链
5. blktrace (底层追踪)
设备级I/O追踪:
blktrace -d /dev/sda -o sda_trace # 开始记录
blkparse sda_trace > analysis.log # 转码分析
解析字段范例:
8,0 3 1 0.000000000 1123 Q WS 1347375936 + 8 [bash]
8,0 3 2 0.000006251 1123 G WS 1347375936 + 8 [bash]
各列含义:设备号、操作序列、时间戳(秒)、进程ID、操作类型(Q:入队,G:获取请求)、读写类型、起始扇区
6. bcc-tools (动态跟踪)
安装BPF工具集:
yum install bcc-tools -y
案例:追踪慢IO请求
biolatency 5 3 # 每5秒统计一次,共3次
输出直方图显示不同区间的I/O延迟分布,快速定位延迟异常
四、基准测试方法
7. fio (压力测试)
测试随机写性能:
fio --filename=/mnt/test --direct=1 --rw=randwrite --bs=4k \
--ioengine=libaio --iodepth=256 --runtime=60 --time_based \
--name=test --group_reporting
参数解读:
direct=1
:跳过缓存,直写磁盘iodepth=256
:队列深度模拟高并发group_reporting
:合并线程统计结果
8. hdparm (理论速度测试)
查看设备缓存读速度:
hdparm -Tt /dev/sda
输出解析:
- Timing cached reads:内核缓存读取速度(非物理磁盘)
- Timing buffered disk reads:实际磁盘读取速度
五、企业级监控架构设计
分层监控方案示例:
- 实时层:Prometheus + node_exporter + Grafana 构建I/O看板
- 日志层:ELK收集/var/log/syslog中的磁盘错误日志
- 告警层:设置Zabbix触发器当%util持续>80%时邮件通知
- 溯源层:sysdig记录异常时间段的容器级I/O行为
容量规划经验公式:所需IOPS = (读占比 × 读IOPS) + (写占比 × 写IOPS × RAID系数)
(RAID5写系数为4,RAID10为2)
六、实用技巧与误区
✓ 避免单纯依赖%util:NVMe固态硬盘可能显示100%但实际吞吐正常
✓ iowait的误读:高iowait不一定是磁盘瓶颈,可能是CPU调度问题
✓ tmpfs干扰:内存文件系统不会产生物理磁盘I/O,需用
标签: