Linux中如何查看磁盘IOPS?查看命令与方法有哪些?

在Linux系统中,IOPS(Input/Output Operations Per Second,每秒读写次数)是衡量存储设备性能的核心指标,直接反映磁盘处理读写请求的能力,无论是系统管理员还是开发人员,掌握IOPS的查看方法对于性能优化、故障排查都至关重要,本文将详细介绍Linux下查看IOPS的多种工具、命令及其实际应用场景,帮助读者全面掌握这一技能。

linux中如何查看iops

通过iostat查看IOPS

iostatsysstat工具包的一部分,专为系统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=100w/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相关的字段包括:

linux中如何查看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/sw/s分别表示该进程每秒读、写请求数,两者相加即为进程级IOPS,帮助快速定位I/O密集型进程。

linux中如何查看iops

通过iotop实时监控IOPS

iotop是一个交互式I/O监控工具,以进程为单位实时显示磁盘读写速率、IOPS等信息,界面直观,适合快速排查异常。

安装与使用

安装:yum install iotop(CentOS)或apt install iotop(Ubuntu)。
运行:iotop -o(仅显示有I/O操作的进程),按P按IOPS排序,按T按传输速率排序。

输出中,READ/sWRITE/s分别表示进程每秒读、写请求数,直观反映各进程的IOPS贡献。

工具对比与选择

为方便选择,以下是常用IOPS查看工具的对比:

工具名称 适用场景 命令示例 关键IOPS字段
iostat 实时监控设备级IOPS,性能分析 iostat -d -x 1 r/sw/s
sar 历史数据趋势分析,长期监控 sar -d 1 tps
/proc/diskstats 脚本化监控,原始数据获取 cat /proc/diskstats 第4列(读)、第8列(写)
pidstat 进程级IOPS定位,问题排查 pidstat -d -p 1234 1 r/sw/s
iotop 交互式实时监控,进程排序 iotop -o READ/sWRITE/s

注意事项

  1. 单位确认iostatpidstat中的r/sw/s单位为“次/秒”,直接对应IOPS;sartps同样为总IOPS。
  2. 采样间隔:短间隔(如1秒)可捕捉突发I/O,但可能受缓存影响;长间隔(如10秒)更反映稳定性能。
  3. 合并请求:Linux内核会合并相邻的I/O请求(如连续扇区读写),实际IOPS可能低于理论值,工具显示的是合并后的请求数。
  4. 设备区分:通过lsblkfdisk -l确认设备名称(如sda、nvme0n1),避免监控错误磁盘。

相关问答FAQs

Q1:为什么用iostat查看IOPS时,r/s + w/s有时和tps不一致?
A:iostattps(transfers per second)表示每秒磁盘传输的总次数,理论上等于r/s + w/s,若出现不一致,可能是由于iostat版本差异或显示精度问题(如旧版iostat未区分合并请求),建议使用新版sysstat(12.5.2),并通过iostat -x查看r/sw/s,两者相加即为准确IOPS。

Q2:如何通过脚本持续监控磁盘IOPS并超过阈值告警?
A:可结合iostatbc计算IOPS,并通过mailcurl发送告警,示例脚本如下:

#!/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

(0)
酷番叔酷番叔
上一篇 2025年10月8日 02:46
下一篇 2025年10月8日 03:02

相关推荐

  • 如何在Linux系统中查询主板型号?

    在Linux系统中,查询主板型号是硬件维护、系统兼容性检查或故障排查时的常见需求,由于Linux没有统一的图形化硬件管理工具,用户通常需要通过命令行工具或系统文件获取信息,本文将详细介绍多种在Linux下查询主板型号的方法,包括命令行工具、系统文件读取及不同场景下的适用技巧,使用dmidecode命令读取DMI……

    2025年9月18日
    2200
  • 如何快速提取data.txt第2、4、5列?

    方法1:使用 cut 命令(简单分隔符场景)适用场景:列由固定分隔符(如逗号、制表符)分隔,且列位置连续,命令格式:cut -d '分隔符' -f 列序号列表 文件名示例:# 提取第1到第3列(分隔符为制表符,默认)cut -f 1-3 data.txt注意:-d 指定分隔符(默认制表符),-f……

    2025年7月28日
    4300
  • vi真有gdb模式?

    场景1:在gdb中误入vi界面(常见原因)当使用gdb调试时,若通过layout命令启用TUI(文本用户界面)或设置EDITOR=vi,gdb会调用vi风格的界面,退出方法如下:退出gdb的TUI模式按 Ctrl + X, Ctrl + A 组合键(先按Ctrl+X,松开后按Ctrl+A)或执行命令: (gdb……

    2025年7月17日
    4900
  • 为什么开发者都在用ko文件?

    Kubernetes 对象 (ko) 文件是 YAML 或 JSON 格式的配置文件,用于声明式地定义和管理集群中应用、服务等资源的目标状态,使用它们能实现版本控制、环境一致性、自动化部署和可重复性,简化复杂应用的编排与管理。

    2025年6月20日
    5700
  • Linux如何彻底卸载Conky?

    Conky是一款在Linux系统上广泛使用的轻量级系统监视器,它能够以文本或图形化方式实时显示系统资源使用情况,如CPU占用率、内存消耗、网络速度、磁盘I/O等信息,许多用户选择Conky来定制个性化的桌面信息展示,但随着使用需求的改变或系统配置的更新,卸载Conky也成为常见操作,本文将详细介绍在不同Linu……

    2025年8月22日
    3000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信