Linux怎么查看磁盘读写延迟_Linux ioping测试磁盘延迟方法【技巧】

胖强同学_4474

胖强同学_4474

2026-04-07

706人浏览

原创

ioping、iostat、fio、io调度器调优及存储栈分层诊断是linux磁盘i/o延迟五大实测方法:ioping测裸设备毫秒级延迟;iostat -x看await定位排队与服务延迟;fio分析p99.9长尾延迟;调度器与队列深度匹配优化;blktrace+dmesg分层排查链路瓶颈。

linux怎么查看磁盘读写延迟_linux ioping测试磁盘延迟方法【技巧】

如果您在Linux系统中观察到应用响应变慢、数据库事务延迟增加或日志写入卡顿,且初步怀疑与磁盘I/O相关,则需重点评估磁盘读写延迟。ioping是专用于测量块设备I/O延迟的轻量级工具,可提供毫秒级响应时间统计。以下是针对磁盘读写延迟的多种实测方法:

一、使用ioping直接测试块设备延迟

ioping通过向指定块设备(如/dev/sda、/dev/nvme0n1)发送同步I/O请求并测量往返时间,绕过文件系统缓存,真实反映底层存储延迟。它默认以512字节随机写+读混合模式探测,适用于SSD与HDD。

1、安装ioping工具:执行yum install -y ioping(CentOS/RHEL)或apt install -y ioping(Ubuntu/Debian)。

2、对目标磁盘设备执行基础延迟测试:运行ioping -c 10 /dev/sda,其中-c 10表示发送10个探测请求。

3、查看输出中的min/avg/max/mdev字段:重点关注avg值(平均延迟),HDD通常为5–15ms,NVMe SSD应低于0.2ms,若avg持续高于10ms需进一步排查。

4、强制同步写入以排除缓存干扰:添加-C参数运行ioping -C -c 10 /dev/sda,确保每次请求均落盘。

二、结合iostat分析实时I/O等待延迟

iostat -x可输出每个I/O请求在队列中等待及设备服务的综合平均时间(await),该值包含排队延迟与实际服务延迟,是诊断高延迟问题的首要指标。

1、确保sysstat已安装:运行yum install -y sysstat或apt install -y sysstat。

2、执行持续监控命令:输入iostat -dx 1,每秒刷新一次扩展统计。

3、定位目标设备行:在输出中查找对应磁盘(如sda、nvme0n1),关注await列数值,若长期高于10ms(HDD)或1ms(SSD)即存在异常延迟。

4、交叉验证r_await与w_await:分别表示读请求与写请求的平均等待时间,若二者显著差异,说明读或写路径存在单独瓶颈。

三、利用fio模拟随机I/O并提取延迟分布

fio支持生成指定深度、大小、模式的I/O负载,并输出详细的延迟百分位数(如clat_ns中p99、p99.9),可识别长尾延迟现象,适用于定位偶发性高延迟事件。

1、创建fio配置文件io_delay.fio,内容如下:

filename=/dev/sda

direct=1

rw=randread

bs=4k

iodepth=1

runtime=60

time_based

group_reporting

name=randread_4k

2、保存后执行测试:fio io_delay.fio。

3、在输出结果中查找clat (completion latency) percentile部分,特别注意p99.9值是否突增至数十毫秒以上。

4、对比iodepth=1与iodepth=32下的p99.9变化:若高队列深度下延迟急剧上升,表明设备无法有效处理并发请求。

四、检查内核IO调度器与设备队列深度

IO调度器策略与硬件队列深度不匹配会导致请求堆积,表现为await升高但%util未达100%,尤其在多核高并发场景下明显。

1、查看当前调度器设置:运行cat /sys/block/sda/queue/scheduler,输出中被方括号包围的即为激活调度器。

2、对NVMe设备确认队列深度:cat /sys/block/nvme0n1/queue/nr_requests,正常值应≥128;若低于64,需调高。

3、临时切换调度器测试效果:执行echo none > /sys/block/sda/queue/scheduler(SSD适用)或echo mq-deadline > /sys/block/sda/queue/scheduler(HDD适用)。

4、重新运行ioping或iostat观察await值是否明显下降,若下降显著,说明原调度器引入额外排队开销。

五、检测存储栈路径中的异常延迟源

从应用到物理磁盘之间存在多层抽象(文件系统、块层、驱动、HBA、背板、阵列控制器),任一层异常均可能抬升延迟。需逐层剥离验证。

1、绕过文件系统直测裸设备:使用ioping或fio指向/dev/sda而非挂载点路径,排除ext4/xfs等文件系统锁或日志开销影响。

2、检查dmesg是否存在I/O错误:运行dmesg -T | grep -i "ata\|nvme\|error\|timeout",发现超时或重试记录即表明链路层故障。

3、验证HBA或RAID卡缓存状态:对LSI卡执行MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL,确认BBU健康且WriteBack模式启用;若BBU失效,控制器将强制降级为WriteThrough,大幅增加写延迟。

4、使用blktrace捕获原始I/O轨迹:运行blktrace -d /dev/sda -o - | blkparse -i -,分析trace中q(queue)、m(map)、d(issue)、c(complete)各阶段耗时,定位延迟发生在哪一环节。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

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

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

969

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

2780

5

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5507

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2388

6

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5507

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2388

6

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

2025.09.05

530

5

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.16

323

7

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

2025.11.17

513

20

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习