0

0

Linux磁盘性能评估流程_IO瓶颈定位方法【教程】

舞姬之光

舞姬之光

发布时间:2026-01-01 09:17:02

|

763人浏览过

|

来源于php中文网

原创

真正瓶颈需综合await、aqu-sz和I/O模式判断:sda的%util=100%但r/s=0,w_await=12.43ms>10ms且aqu-sz=1.54>1,wareq-sz=10.45KB偏小,表明随机小写导致IOPS瓶颈,非带宽不足。

linux磁盘性能评估流程_io瓶颈定位方法【教程】

怎么看 iostat 输出里真正的瓶颈项

直接看 %util 容易误判——它只反映设备忙闲比例,不等于 I/O 瓶颈。真正要盯的是 await(平均每次 I/O 等待毫秒数)和 r_await/w_await。如果 await > 10ms(机械盘)或 > 1ms(SSD),且 %util 持续接近 100%,才说明 I/O 队列积压严重。

  • iostat -x 1 是必须加的参数,-x 才能显示扩展指标
  • 关注 avgqu-sz:长期 > 1 表示队列中常有未处理请求,结合高 await 就是典型瓶颈信号
  • 注意采样周期:用 iostat -x 1 连续观察,避免单次快照误导;瞬时尖峰可能来自临时写入,持续 5 秒以上高值才需干预

pidstat -d 定位吃 I/O 的具体进程

iotop 直观但依赖内核模块,有些生产环境禁用;pidstat -d 更轻量、兼容性更好,且能输出每秒读写字节数和 I/O 请求次数。

  • 执行 pidstat -d 1,重点关注 kB_rd/skB_wr/s 列,数值突增的进程就是嫌疑对象
  • 若某进程 MB_wr/s 持续 > 50 且磁盘 await 同步升高,基本可锁定为源头
  • 注意区分缓存写入:dd if=/dev/zero of=test bs=1M count=1024 oflag=directoflag=direct 可绕过 page cache,测出真实磁盘吞吐,避免被缓存掩盖问题

blktrace 抓取底层 I/O 路径,确认是不是内核或驱动层卡住

iostat 显示高 awaitpidstat 却没发现明显大户时,问题可能在块层——比如多路径切换异常、NVMe 驱动 bug、或 LVM thin pool 元数据锁争用。

  • 先用 blktrace -d /dev/sda -o - | blkparse -i - 实时解析(需 root 权限)
  • 重点看 Q(queue)、G(get request)、M(merge)、I(issue)之间的时间差;若 Q→G 延迟大,说明 I/O 在队列里等太久;若 I→C(complete)超长,可能是硬件响应慢或驱动挂起
  • 配合 cat /proc/diskstatsio_ticks(设备忙时间,单位 ms):如果该值增长远快于 wall clock,说明设备真正在满负荷运转

检查文件系统和挂载选项是否拖慢 I/O

常见陷阱:ext4 默认启用 barrier=1,XFS 在某些内核版本下 journal 写入阻塞主线程,或者挂载时漏掉 noatime 导致大量元数据更新。

讯飞智作-讯飞配音
讯飞智作-讯飞配音

讯飞智作是一款集AI配音、虚拟人视频生成、PPT生成视频、虚拟人定制等多功能的AI音视频生产平台。已广泛应用于媒体、教育、短视频等领域。

下载
  • 运行 mount | grep " / ",确认根分区是否含 noatimecommit=60(降低 sync 频率)等优化项
  • 对数据库类负载,XFS 推荐加 logbsize=256klogbufs=8;ext4 建议用 data=writeback(仅适用于能接受日志丢失风险的场景)
  • 警惕 sync 类调用:用 strace -p $PID -e trace=fsync,fdatasync,msync 检查应用是否频繁强制刷盘
sudo iostat -x 1
Linux 5.15.0-101-generic (host)   04/12/2024  _x86_64_  (8 CPU)

Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util sda 0.00 124.00 0.00 1296.00 0.00 12.00 0.00 8.77 0.00 12.43 1.54 0.00 10.45 8.04 100.00

上面这个例子中,sda%util 是 100%,但 r/s 为 0,说明全是写;w_await=12.43ms + aqu-sz=1.54 表明写请求在队列中等待明显,再结合 wareq-sz=10.45KB(写大小偏小),大概率是随机小写导致 IOPS 吃紧,而非带宽跑满。

真正难排查的,往往是多个小进程分散写同一块日志区域,pidstat 看不出峰值,但 blktrace 会暴露大量 Q→I 微秒级延迟跳变——这种毛刺型瓶颈,得靠持续采样+时间对齐才能抓到。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

713

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.11.20

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

471

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

471

2023.08.10

数据库三范式
数据库三范式

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

332

2023.06.29

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

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

2068

2023.08.14

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

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

346

2023.08.31

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

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

251

2023.09.05

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

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

精品课程

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

共48课时 | 6.3万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

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

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