【云原生技术】如何查看linux磁盘性能
# 在 Linux 上查看磁盘性能的常用方法与命令下面给你一套从“快速观察 → 过程定位 → 基准测试 → 健康诊断”的完整思路与常用命令,基本覆盖日常排查与评估磁盘性能的需求。## 你需要关注的关键指标- **吞吐量**:MB/s(如 `rkB/s`, `wkB/s`)- **IOPS**:每秒 I/O 次数(如 `r/s`, `w/s`)- **时延**:平均等待/完成时间(如 `r_awai
·
如何查看linux磁盘性能
在 Linux 上查看磁盘性能的常用方法与命令
下面给你一套从“快速观察 → 过程定位 → 基准测试 → 健康诊断”的完整思路与常用命令,基本覆盖日常排查与评估磁盘性能的需求。
你需要关注的关键指标
- 吞吐量:MB/s(如
rkB/s,wkB/s) - IOPS:每秒 I/O 次数(如
r/s,w/s) - 时延:平均等待/完成时间(如
r_await,w_await),分位延迟在 fio/bpf 工具中更清晰 - 队列深度:平均队列长度(如
aqu-sz) - 利用率:设备繁忙比例(如
%util)
通常判断:
%util长期接近 100%:设备已饱和r_await/w_await明显升高:延迟问题aqu-sz大且持续:排队严重(队列过深/请求处理慢)- IOPS 高但吞吐低:小块随机 I/O 为主
- 吞吐高但 IOPS 低:大块顺序 I/O 为主
一、先识别磁盘与文件系统
# 设备与挂载点/类型
lsblk -o NAME,TYPE,SIZE,MODEL,ROTA,MOUNTPOINT,FSTYPE
# 检查是否为旋转盘(0=SSD, 1=HDD)
cat /sys/block/sdX/queue/rotational
# 查看 I/O 调度器(SSD 常用 none/mq-deadline)
cat /sys/block/sdX/queue/scheduler
二、实时监控(系统整体视角)
1) iostat(强烈推荐)
# 扩展模式 + 每秒刷新
iostat -xz 1
重点看:r/s w/s rkB/s wkB/s r_await w_await aqu-sz %util。
如果没有安装:sudo apt/yum install sysstat。
2) sar(历史/实时均可)
# 实时 1 秒采样,5 次
sar -d 1 5
# 历史日志(需要 sysstat 已启用统计)
sar -d -f /var/log/sa/saXX
3) dstat(综合看 I/O)
dstat -dny --top-io 1
4) vmstat(看 iowait 和块 I/O)
vmstat 1
# 关注 wa(iowait)、bi/bo(块读写速率)
三、按进程定位“谁在刷盘/卡顿”
# 进程级 I/O 速率与延迟
pidstat -d 1
# 实时按进程显示 I/O(需要CAP)
sudo iotop -oPa
# 定位某目录下哪些文件被频繁访问
sudo lsof +D /path/to/dir 2>/dev/null | head
四、健康状态与硬件层面
# S.M.A.R.T 健康检查(SATA/SAS)
sudo smartctl -a /dev/sdX
# NVMe 健康日志
sudo nvme list
sudo nvme smart-log /dev/nvme0
注意看:介质错误、温度、可用寿命、重映射计数等。
同时检查内核日志是否有 I/O 错误:
dmesg | egrep -i 'error|nvme|blk|I/O'
五、快速“只读”测试与“合规”基准压测
1) 快速只读(不写盘,安全)
# 顺序读测试(包括缓存与直接从盘)
sudo hdparm -Tt /dev/sdX
-T测内存缓存,-t测实际盘顺序读。
2) 标准压测:fio(推荐)
- 注意:写测试会对磁盘和文件系统产生压力与数据改变。请在测试盘或测试文件上执行。
- 使用
--filename=/mount/testfile并保证足够空间;--direct=1绕过页缓存,更贴近设备能力。
示例(4k 随机读):
fio --name=4k-randread --filename=/data/fio.test --size=8G \
--bs=4k --rw=randread --iodepth=32 --numjobs=4 \
--ioengine=libaio --direct=1 --time_based --runtime=60 \
--group_reporting
示例(1M 顺序写,谨慎):
fio --name=1m-write --filename=/data/fio.test --size=8G \
--bs=1M --rw=write --iodepth=8 --numjobs=1 \
--ioengine=libaio --direct=1 --time_based --runtime=60 \
--group_reporting
关键信息解读:
IOPS、BW=(带宽)、clat(完成时延,留意均值与 P99/P99.9)- 将不同
bs(块大小)和iodepth(队列深度)组合测试,了解吞吐与时延的权衡
提示:
- 文件系统缓存影响很大;做“设备能力”评估用
--direct=1 - 生产环境测试要避开业务高峰,或在独立磁盘/LUN 上进行
六、更深入的延迟与请求分布(可选)
若环境具备 BCC/eBPF 工具:
# 观测块 I/O 延迟分布
sudo biolatency 1
# 显示每次块 I/O(设备、进程、时延)
sudo biosnoop
没有 bcc 时可用 blktrace + btt,但较复杂。
七、文件系统与层级因素
- 文件系统挂载参数(如
noatime/relatime,barrier,discard)会影响性能:
mount | grep ' /data '
- XFS/Ext4 参数查看:
xfs_info /dev/mapper/vg0-lv_data
sudo tune2fs -l /dev/sdXn
- LVM/RAID/虚拟化层可能叠加开销:
lsblk -o NAME,TYPE,SIZE,MOUNTPOINT
cat /proc/mdstat # MD RAID
lvs -o lv_name,lv_size,data_percent,lv_attr
八、常见判断与排障建议
%util≈100%且r_await/w_await高:设备/阵列已满负载 → 考虑提升并发策略、优化访问模式、升级存储aqu-sz持续高:应用或文件系统发起的请求超出设备能力 → 调整iodepth/应用线程,或 QoS 限制- IOPS 不上去但 CPU 空闲:可能被控制器/网络存储限制(如云盘的 Burst 限额)
- 读性能波动:检查硬件错误、温度限速、掉速(
smartctl,dmesg) - 随机小 I/O 很慢:合并 I/O、批量、异步、使用更适合的文件系统参数,或引入本地 SSD 缓存
九、快速命令清单(可复制)
# 识别设备
lsblk -o NAME,TYPE,SIZE,MODEL,ROTA,MOUNTPOINT,FSTYPE
# 实时总览
iostat -xz 1
# 历史/实时
sar -d 1 5
# 进程 I/O
pidstat -d 1
sudo iotop -oPa
# 健康检查
sudo smartctl -a /dev/sdX
sudo nvme smart-log /dev/nvme0
dmesg | egrep -i 'error|nvme|blk|I/O'
# 快速只读测试
sudo hdparm -Tt /dev/sdX
# fio 示例(随机读)
fio --name=4k-randread --filename=/data/fio.test --size=8G \
--bs=4k --rw=randread --iodepth=32 --numjobs=4 \
--ioengine=libaio --direct=1 --time_based --runtime=60 \
--group_reporting
更多推荐



所有评论(0)