0

0

如何在Linux中监控磁盘IO Linux iostat实时统计

P粉602998670

P粉602998670

发布时间:2025-08-25 08:16:01

|

574人浏览过

|

来源于php中文网

原创

使用iostat监控Linux磁盘IO,通过安装sysstat包并运行iostat -xk 2 5获取每秒磁盘读写、吞吐量、await等待时间和%util利用率等关键指标,结合%util与await判断瓶颈,再用iotop、vmstat等工具辅助定位具体进程或系统负载问题。

如何在linux中监控磁盘io linux iostat实时统计

在Linux系统中,监控磁盘IO最直接且常用的方法是使用

iostat
命令。它能提供实时的磁盘活动统计数据,帮助你快速了解I/O负载、瓶颈所在,从而进行性能分析和故障排查。

解决方案

要深入了解Linux系统的磁盘IO状况,

iostat
是一个不可或缺的工具。它属于
sysstat
包,如果你的系统上没有,通常可以通过包管理器安装,比如在Debian/Ubuntu上是
sudo apt install sysstat
,在CentOS/RHEL上是
sudo yum install sysstat
sudo dnf install sysstat

一旦安装完成,最基本的用法就是直接在终端输入

iostat

iostat

这会显示自系统启动以来的平均I/O统计数据。对于实时监控,你需要指定一个刷新间隔和可选的计数。例如,每2秒刷新一次,共显示5次:

iostat 2 5

这会让你看到一个动态的I/O快照。然而,仅仅这些数据可能不够详细。为了获取更全面的信息,特别是关于每个设备(磁盘或分区)的详细统计,以及扩展的统计信息,我会加上

-x
选项:

iostat -x 2 5

-x
选项会显示扩展统计信息,这对于深入分析至关重要。如果你想看到以KB/s或MB/s为单位的吞吐量,而不是默认的块单位,可以分别使用
-k
-m
选项:

iostat -xk 2 5
iostat -xm 2 5

我个人更倾向于使用

-xk
,因为KB/s在大多数日常场景下更直观,也更容易与网络带宽等其他指标进行比较。

有时候,你可能只关心特定的设备,比如

sda
nvme0n1
。你可以这样指定:

Tana
Tana

“节点式”AI智能笔记工具,支持超级标签。

下载
iostat -xk /dev/sda 2 5

这就能让你聚焦在某个特定磁盘的性能表现上,尤其是在多磁盘系统中排查问题时,这非常有用。

iostat输出的各项指标都代表什么?

iostat -x
的输出包含了许多关键指标,理解它们是正确诊断磁盘性能问题的基础。我发现很多人刚接触时会被这些缩写搞得一头雾水,但它们其实都非常直观:

  • r/s (read requests per second): 每秒从设备读取的请求次数。这反映了读取操作的频率。
  • w/s (write requests per second): 每秒向设备写入的请求次数。这反映了写入操作的频率。
  • rkB/s (read kilobytes per second): 每秒从设备读取的千字节数。这是读取吞吐量。
  • wkB/s (write kilobytes per second): 每秒向设备写入的千字节数。这是写入吞吐量。
  • rrqm/s (merged read requests per second): 每秒合并的读请求数。操作系统会将一些相邻的、小的读请求合并成一个大的请求,这个值越高,说明I/O调度器在合并请求方面做得不错,减少了实际的I/O操作次数。
  • wrqm/s (merged write requests per second): 每秒合并的写请求数。同理,这表示合并的写请求数。
  • await (average wait time): 每个I/O请求的平均等待时间(毫秒)。这个时间包括了请求在队列中等待的时间和实际执行I/O操作的时间。这是我个人非常关注的一个指标,因为它直接反映了I/O响应速度。高
    await
    值通常意味着I/O操作正在排队,系统响应变慢。
  • svctm (average service time): 每个I/O请求的平均服务时间(毫秒)。这是I/O请求实际在设备上执行的时间,不包括在队列中等待的时间。这个值通常比较小,如果它突然飙升,可能意味着磁盘本身出了问题。但需要注意的是,
    svctm
    在Linux 2.6内核及之后,其计算方式变得不那么可靠,所以更多时候我还是会看
    await
  • %util (percentage of CPU utilization for I/O): 设备利用率。表示设备用于I/O操作的时间百分比。如果这个值接近100%,意味着磁盘几乎一直在忙碌,可能是I/O瓶颈的直接信号。但它不完全等于磁盘饱和,因为并行I/O的存在,一个磁盘在逻辑上100%忙碌,但如果它能处理大量并行请求,性能可能依然良好。然而,结合
    await
    来看,如果
    %util
    很高且
    await
    也高,那基本可以确定磁盘是瓶颈了。

如何根据iostat数据判断磁盘性能瓶颈?

判断磁盘性能瓶颈,不是简单看一个指标就能下结论的,需要综合分析。我通常会从几个关键点入手:

  • 高 %util 伴随高 await: 这是最典型的磁盘瓶颈特征。如果
    %util
    持续接近100%,而
    await
    值也显著升高(比如对于SSD,超过几毫秒就值得警惕;对于HDD,几十毫秒可能也算正常,但如果达到数百毫秒,那肯定有问题),这意味着磁盘已经饱和,I/O请求正在大量排队等待处理。
    • 对于SSD,我个人经验是
      await
      超过5-10ms就应该引起注意,超过20ms就很可能影响应用性能。
    • 对于传统HDD,
      await
      超过20-50ms可能还算可以接受,但如果持续超过100ms,那肯定有问题了。
  • 高 rkB/s 或 wkB/s 但低 r/s 或 w/s: 这说明磁盘正在进行大量的大块数据传输(吞吐量高),但每秒的I/O操作次数(IOPS)并不高。这通常是顺序读写密集型应用(如文件传输、视频流)的特征。如果此时
    await
    也很高,可能是磁盘的顺序读写能力达到了上限。
  • 高 r/s 或 w/s 但低 rkB/s 或 wkB/s: 这表示磁盘正在处理大量的小文件I/O请求(IOPS高),但总的吞吐量不高。这在数据库、邮件服务器等随机I/O密集型应用中很常见。如果此时
    await
    很高,说明磁盘的随机读写能力不足,或者说它的IOPS能力达到了瓶颈。
  • 磁盘利用率(%util)很高,但吞吐量(rkB/s, wkB/s)和IOPS(r/s, w/s)却不高: 这可能意味着磁盘正在处理大量非常小的I/O请求,或者请求合并效率低下,导致每次I/O的开销相对较大,虽然数据量不大,但磁盘却很忙。
  • 特定设备的指标异常: 如果你的系统有多个磁盘,
    iostat -x
    会列出每个磁盘的统计信息。如果只有一个或少数几个磁盘的
    await
    %util
    异常高,那么问题很可能就出在这些磁盘上,或者有某个进程正在对它们进行大量I/O操作。

诊断时,我还会结合系统日志(

dmesg
journalctl -k
)查看是否有磁盘相关的错误信息,以及使用
df -h
检查磁盘空间使用情况,有时候空间不足也会导致I/O性能下降。

除了iostat,还有哪些工具可以辅助监控Linux磁盘IO?

虽然

iostat
是我的首选,但它并非唯一能帮助你了解磁盘I/O的工具。在某些特定场景下,其他工具能提供更细粒度的信息,或者从不同维度来展现问题。

  • vmstat: 这是一个通用的系统监控工具,除了CPU和内存,它也能显示I/O统计信息。运行
    vmstat 2 5
    会在输出中包含
    bi
    (blocks in, 从磁盘读取的块数) 和
    bo
    (blocks out, 写入磁盘的块数)。虽然不如
    iostat
    详细,但它能快速提供一个系统整体的I/O概览,有时能帮助你判断问题是否与I/O相关,或者是否是更广泛的系统资源瓶颈。
  • iotop: 如果你想知道是哪个进程在疯狂地读写磁盘,
    iotop
    是你的最佳选择。它类似于
    top
    命令,但专注于显示进程的I/O活动。直接运行
    sudo iotop
    就能看到实时的进程I/O使用情况,包括读写带宽和IOPS。这对于定位“罪魁祸首”的应用程序非常有效,特别是当
    iostat
    显示磁盘繁忙,但你不知道是哪个应用导致的。
  • sar (System Activity Reporter):
    sar
    是一个非常强大的工具集,
    iostat
    实际上是
    sysstat
    包中的一部分,而
    sar
    则是
    sysstat
    的核心。
    sar
    可以收集、报告或保存系统活动信息。你可以用
    sar -d
    来查看磁盘活动,其输出与
    iostat
    类似,但
    sar
    的优势在于它可以查看历史数据,如果你配置了
    sysstat
    服务,它会定期将系统性能数据保存下来,这样你就能分析过去某个时间点的性能问题。例如,
    sar -d -f /var/log/sysstat/saXX
    可以查看特定日期的磁盘I/O历史数据。
  • pidstat:
    pidstat
    也是
    sysstat
    包的一部分,它能提供进程级别的详细统计信息,包括CPU、内存、I/O等。使用
    pidstat -d 2 5
    可以查看每个进程的I/O统计,例如每秒读写的KB数。与
    iotop
    相比,
    pidstat
    的输出可能更适合脚本化处理或集成到监控系统中,因为它不是一个交互式界面。

这些工具各有侧重,我通常会从

iostat
开始,如果发现I/O是瓶颈,就用
iotop
pidstat
定位具体进程,再结合
vmstat
看看是否有其他资源问题。这种组合拳往往能高效地解决大部分磁盘性能问题。

相关专题

更多
数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

351

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2075

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

347

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

255

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

323

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

410

2023.10.16

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

400

2023.10.16

vb连接数据库的方法
vb连接数据库的方法

vb连接数据库的方法有使用ADO对象库、使用OLEDB数据提供程序、使用ODBC数据源等。详细介绍:1、使用ADO对象库方法,ADO是一种用于访问数据库的COM组件,可以通过ADO连接数据库并执行SQL语句。可以使用ADODB.Connection对象来建立与数据库的连接,然后使用ADODB.Recordset对象来执行查询和操作数据;2、使用OLEDB数据提供程序方法等等。

219

2023.10.19

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

3

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号