macos 无内置读写负载热力图,但可通过 iostat、iosnoop/fs_usage 等命令实时采集各卷 i/o 数据,并用 awk 着色排序或 gnuplot 生成 ascii 条形图实现类热力可视化,核心指标为 mb/s 与 iops。
macos 没有内置命令直接生成“读写负载热力图”,但可以通过终端组合命令实时采集各挂载卷的 i/o 统计,并借助轻量工具(如 htop 的磁盘视图、iostat 或脚本化绘图)近似实现“热力感知”效果。核心思路是:获取每卷的实时读写字节数/秒 + iops,按数值强度映射为视觉层级(如颜色深浅、字符密度或排序位置)。
用 iostat 实时观察各卷 I/O 速率
iostat(来自 Xcode 命令行工具套件)可按设备显示吞吐量和 IOPS。注意:它默认以块设备(如 disk0s2)为单位,需结合 mount 或 df 映射到挂载点:
- 先安装必要工具:
xcode-select --install(确保iostat可用) - 运行:
iostat -I -w 2 -c 5(-I 表示字节/秒,-w 2 表示每 2 秒刷新,-c 5 表示共 5 次) - 输出中
KB/t(每 IO 平均字节数)、tps(每秒传输次数)、MB/s(吞吐率)是关键指标;值越高,负载越重 - 用
df -h | grep '^/dev/'对照设备名与挂载点,例如/dev/disk2s1 → /Volumes/Backup
用 iosnoop + awk 快速识别活跃卷(进程级溯源)
若想定位“哪个卷正在被谁读写”,可用 DTrace 工具 iosnoop(仅限 Intel Mac;Apple Silicon 需用 fs_usage 替代):
- 运行:
sudo iosnoop -r -n 10 | awk '{print $4,$9}' | sort | uniq -c | sort -nr - 输出形如
12 /dev/disk2s1 write,表示该设备写操作最频繁 - 搭配
mount | grep 'disk2s1'即可获知对应挂载路径 - Apple Silicon 用户请改用:
sudo fs_usage -w -f filesys | grep -E '(read|write).*disk' | head -20
简易热力文本视图(无需图形,终端内直观排序)
用以下单行命令生成“类热力”排序列表(读写总带宽降序,高亮前 3 名):
sudo iostat -I -w 1 -c 1 | awk '/^disk/ {dev=$1; getline; r=$3; w=$4; print r+w, dev}' | sort -nr | head -10 | awk '{color=($1>10000000)?"\033[1;31m":($1>1000000)?"\033[1;33m":"\033[0m"; printf "%s%8.1f MB/s %s\033[0m\n", color, $1/1024/1024, $2}'
- 该命令将每秒读+写字节数转为 MB/s,按大小排序,>10 MB/s 标红,1–10 MB/s 标黄
- 结果中排在最上方的挂载设备即当前“最热”卷(需手动查挂载点)
- 如需自动关联挂载点,可进一步用
diskutil info查询设备 UUID 后匹配/etc/fstab或mount输出
进阶:用 gnuplot 生成 ASCII 热力条(纯终端图形)
安装 gnuplot(brew install gnuplot),再运行以下脚本片段,可将实时 I/O 数据转为横向字符条图:
- 先采集数据:
sudo iostat -I -w 1 -c 1 | awk '/^disk/ {getline; print $1, $3+$4}' > /tmp/io.dat - 绘图命令:
gnuplot -e "set terminal dumb 80 20; set yrange [0:*]; plot '/tmp/io.dat' using 2:xtic(1) with boxes" - 输出为 ASCII 条形图,高度反映 I/O 强度,视觉上接近“热力分布”
- 配合
watch -n 1 'bash io-plot.sh'可实现自动刷新











