0

0

Linux 磁盘 I/O 问题定位技巧

舞姬之光

舞姬之光

发布时间:2026-02-24 13:04:03

|

549人浏览过

|

来源于php中文网

原创

判断i/o瓶颈应优先看await(>10–20ms需警惕)和avgqu-sz(持续>1且await升高说明排队),而非%util;svctm已不可靠,需结合iotop -opa、pidstat -d及/proc/pid/io等多工具分层定位。

linux 磁盘 i/o 问题定位技巧

怎么看 iostat 输出里哪个设备真在拖慢系统

直接看 %util 容易误判——它只反映设备忙闲比例,不等于瓶颈。真正关键的是 await(平均每次 I/O 等待毫秒数)和 svctm(实际服务时间),但注意:现代内核里 svctm 已不可靠,await 显著高于 10–20ms 就值得怀疑。

实操建议:

  • iostat -x 1 每秒刷新,重点关注 r_awaitw_awaitavgqu-sz(平均队列长度)。若 avgqu-sz 长期 > 1 且 await 持续升高,说明请求在排队
  • 对比同类型设备:比如都是 NVMe 盘,sdbawaitsda 的 5 倍,优先查 sdb 对应的文件系统或应用逻辑
  • 别只盯 sda——有些系统把日志盘、数据库数据盘分在 nvme0n1p2 这类名字上,iostat 默认不显示完整设备名,加 -d 参数或看 /proc/partitions

pidstat -d 找出吃 I/O 的进程,但为什么经常漏掉

pidstat -d 只统计进程级的读写字节数,对短时高频小 IO(比如每秒几千次 4KB 写)、内存映射文件(mmap)、或通过管道/套接字间接触发磁盘写入的场景,基本不体现。

实操建议:

  • 先跑 pidstat -d 1 看大头,再立刻补一句 iotop -oPa(只显示实际在做 I/O 的线程,-P 显示进程名,-a 显示累计 I/O)
  • 注意 iotop 默认按实时吞吐排序,但“高吞吐”不等于“高延迟贡献者”。一个每秒写 1MB 的日志进程,可能比每秒写 100KB 但卡住数据库事务的进程更无害
  • 如果 iotop 里看到 javapostgres 占着高 I/O,别急着优化代码——先查它是否在刷脏页:cat /proc/<pid>/io | grep write_bytes</pid>,再对比 pg_stat_bgwriter(PostgreSQL)或 JVM 的 GC 日志中是否频繁触发 CMS/Full GC 导致大量对象落盘

lsof +D 扫目录很慢,还可能卡死,有没有轻量替代

lsof +D /var/log 会递归遍历所有子目录并检查每个打开文件的 inode,遇到 NFS 挂载点、坏块或权限受限路径极易卡住。而且它只告诉你“谁打开了文件”,不告诉你“此刻正在读写哪部分”。

Scribble Diffusion
Scribble Diffusion

使用AI将你的草图变成精致的图像

下载

实操建议:

  • find /var/log -xdev -type f -printf '%p %T@\n' | sort -k2nr | head -20 快速定位最近被修改的文件,再用 lsof /var/log/app.log 精准查单个文件
  • 想看实时写入位置?sudo dd if=/dev/zero of=/tmp/test bs=4k count=100 oflag=sync 后立刻 cat /proc/diskstats,对比前后变化,能快速验证是不是某块盘响应异常
  • 更准的办法是用 perf record -e block:block_rq_issue,block:block_rq_complete -a sleep 5 抓底层块层事件,但需要 root 权限且输出需解析,日常排查够用,别一上来就上这个

为什么 vmstatbi/bo 很低,但磁盘还是卡

bi(blocks in)和 bo(blocks out)是每秒传输的块数(默认 1KB/块),数值低只说明吞吐量小,不代表延迟低。比如一个应用每秒只发 10 次写请求,但每次都要等 200ms 才返回,bi 可能才 10,iostat 却显示 await=200

实操建议:

  • 不要单独看 vmstat 判断 I/O 健康,它缺延迟维度。必须配合 iostat -xawaitsvctm(尽管后者不准,但趋势可参考)
  • 如果 bi/bo 低 + iostat%util 也低 + await 却高,大概率是存储侧问题:后端 RAID 卡电池故障导致写缓存禁用、SAN 存储 QoS 限速、或云盘 IOPS 配额耗尽(如 AWS gp3 未配置足够 iops
  • 查云环境时,cat /sys/block/nvme0n1/device/model 看是不是 Amazon Elastic Block Store,然后立刻去控制台看 CloudWatch 中 VolumeIdleTimeVolumeQueueLength,这两个比本地工具更准

复杂点在于:I/O 延迟可能横跨内核块层、驱动、HBA、阵列控制器、网络(iSCSI/NVMe-oF)、甚至远端存储节点。定位时得一层层剥,别指望一个命令扫清全场。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

828

2023.08.22

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

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

199

2023.11.20

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

404

2023.09.04

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

76

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

300

2023.11.28

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

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

719

2023.08.10

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

163

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

998

2023.11.02

苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法

本专题汇总苹果官网最新可用入口及中国站点访问方式,涵盖官网直达链接、iPhone官方页面查看方法与常见访问说明,帮助用户快速进入苹果官方网站,便捷了解产品信息与官方服务。

2

2026.02.24

热门下载

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

精品课程

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

共48课时 | 9.6万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

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

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