在Linux系统中,IOPS(Input/Output Operations Per Second,每秒读写次数)是衡量存储设备性能的核心指标,直接反映磁盘处理读写请求的能力,无论是系统管理员还是开发人员,掌握IOPS的查看方法对于性能优化、故障排查都至关重要,本文将详细介绍Linux下查看IOPS的多种工具、命令及其实际应用场景,帮助读者全面掌握这一技能。
通过iostat查看IOPS
iostat
是sysstat
工具包的一部分,专为系统I/O性能监控设计,能够实时展示磁盘设备的读写请求数、带宽、等待时间等关键指标,是最常用的IOPS查看工具之一。
安装与基本使用
若系统中未安装sysstat
,可通过包管理器安装(如CentOS:yum install sysstat
;Ubuntu:apt install sysstat
),安装后,执行iostat
即可查看所有磁盘设备的默认统计信息(默认仅显示一次结果,不包含实时动态):
iostat
实时监控IOPS
添加-d
参数可仅显示磁盘统计信息,-x
参数可查看扩展信息(更详细的I/O指标),-t
参数显示时间戳,-c
参数间隔秒数(如每秒更新一次):
iostat -d -x -t 1
输出解读与IOPS计算
执行上述命令后,输出包含多列核心字段,其中与IOPS直接相关的有:
r/s
:每秒设备读请求数(读IOPS);w/s
:每秒设备写请求数(写IOPS);r_await
:读请求平均等待时间(ms);w_await
:写请求平均等待时间(ms);svctm
:平均请求服务时间(ms);util
:设备利用率(%),超过70%可能意味着I/O瓶颈。
IOPS的计算公式:总IOPS = r/s + w/s
,若r/s=100
、w/s=50
,则总IOPS为150,表示设备每秒可处理150次读写请求。
通过sar查看IOPS
sar
(System Activity Reporter)同样是sysstat
工具包的一部分,擅长收集、记录和报告系统历史活动数据,适合长期监控IOPS趋势。
查看实时IOPS
使用sar -d
命令可查看块设备的I/O统计信息,-p
参数以设备名称显示(如sda),1
表示每秒刷新一次:
sar -d -p 1
输出解读
sar的输出中,与IOPS相关的字段包括:
tps
:每秒传输次数(即总IOPS,等于读+写请求数);rd_sec/s
:每秒读取扇区数;wr_sec/s
:每秒写入扇区数;avqsz
:平均请求队列长度。
若tps=200
,表示设备当前IOPS为200,可直接反映其处理能力。
通过/proc/diskstats查看底层IOPS
/proc/diskstats
是Linux内核提供的磁盘统计信息接口,记录了所有块设备的详细读写数据,适合脚本化监控或获取原始数据。
文件结构与字段说明
该文件每行代表一个磁盘设备,包含多个字段,其中与IOPS直接相关的是:
- 第4列:读完成的总请求数(累计值);
- 第8列:写完成的总请求数(累计值)。
计算IOPS的方法
由于数据是累计值,需通过两次采样差值计算IOPS,编写脚本监控sda设备的IOPS:
#!/bin/bash prev_read=$(cat /proc/diskstats | grep 'sda ' | awk '{print $4}') prev_write=$(cat /proc/diskstats | grep 'sda ' | awk '{print $8'}) sleep 1 curr_read=$(cat /proc/diskstats | grep 'sda ' | awk '{print $4}') curr_write=$(cat /proc/diskstats | grep 'sda ' | awk '{print $8'}) iops=$(( (curr_read - prev_read) + (curr_write - prev_write) )) echo "Current IOPS: $iops"
执行后,脚本会输出每秒sda设备的IOPS,适合嵌入自动化监控流程。
通过pidstat查看进程级IOPS
若需定位具体进程的I/O负载(如某个应用导致磁盘高负载),可使用pidstat
,它能按进程维度统计读写请求数。
命令与输出
添加-d
参数查看进程I/O统计,-p
指定进程ID(如-p 1234
),-t
按线程显示:
pidstat -d -p 1234 1
输出中,r/s
和w/s
分别表示该进程每秒读、写请求数,两者相加即为进程级IOPS,帮助快速定位I/O密集型进程。
通过iotop实时监控IOPS
iotop
是一个交互式I/O监控工具,以进程为单位实时显示磁盘读写速率、IOPS等信息,界面直观,适合快速排查异常。
安装与使用
安装:yum install iotop
(CentOS)或apt install iotop
(Ubuntu)。
运行:iotop -o
(仅显示有I/O操作的进程),按P
按IOPS排序,按T
按传输速率排序。
输出中,READ/s
和WRITE/s
分别表示进程每秒读、写请求数,直观反映各进程的IOPS贡献。
工具对比与选择
为方便选择,以下是常用IOPS查看工具的对比:
工具名称 | 适用场景 | 命令示例 | 关键IOPS字段 |
---|---|---|---|
iostat |
实时监控设备级IOPS,性能分析 | iostat -d -x 1 |
r/s 、w/s |
sar |
历史数据趋势分析,长期监控 | sar -d 1 |
tps |
/proc/diskstats |
脚本化监控,原始数据获取 | cat /proc/diskstats |
第4列(读)、第8列(写) |
pidstat |
进程级IOPS定位,问题排查 | pidstat -d -p 1234 1 |
r/s 、w/s |
iotop |
交互式实时监控,进程排序 | iotop -o |
READ/s 、WRITE/s |
注意事项
- 单位确认:
iostat
和pidstat
中的r/s
、w/s
单位为“次/秒”,直接对应IOPS;sar
的tps
同样为总IOPS。 - 采样间隔:短间隔(如1秒)可捕捉突发I/O,但可能受缓存影响;长间隔(如10秒)更反映稳定性能。
- 合并请求:Linux内核会合并相邻的I/O请求(如连续扇区读写),实际IOPS可能低于理论值,工具显示的是合并后的请求数。
- 设备区分:通过
lsblk
或fdisk -l
确认设备名称(如sda、nvme0n1),避免监控错误磁盘。
相关问答FAQs
Q1:为什么用iostat查看IOPS时,r/s + w/s
有时和tps
不一致?
A:iostat
中tps
(transfers per second)表示每秒磁盘传输的总次数,理论上等于r/s + w/s
,若出现不一致,可能是由于iostat
版本差异或显示精度问题(如旧版iostat
未区分合并请求),建议使用新版sysstat
(12.5.2),并通过iostat -x
查看r/s
和w/s
,两者相加即为准确IOPS。
Q2:如何通过脚本持续监控磁盘IOPS并超过阈值告警?
A:可结合iostat
和bc
计算IOPS,并通过mail
或curl
发送告警,示例脚本如下:
#!/bin/bash disk="/dev/sda" threshold=1000 # IOPS阈值 while true; do iops=$(iostat -d -x 1 2 | awk '/^'"$disk"'/ {print $3+$4}') if [ $(echo "$iops > $threshold" | bc -l) -eq 1 ]; then echo "Alert: IOPS on $disk is $iops, exceeding threshold $threshold" | mail -s "IOPS Alert" admin@example.com fi sleep 60 done
将脚本加入crontab
(如@reboot /path/to/script.sh
),即可实现持续监控与告警。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38071.html