如何通过系统调用跟踪排查 Linux 存储访问响应时间

大枫酱_9937

大枫酱_9937

2026-06-21

872人浏览

原创

核心是抓真实落盘前的阻塞点:strace查syscall耗时,perf追踪块层延迟,/proc/diskstats验证排队状态,三者结合定位i/o瓶颈。

如何通过系统调用跟踪排查 linux 存储访问响应时间

直接看系统调用层面的 I/O 延迟,核心是抓真实落盘前的阻塞点——不是应用说“我写完了”,而是内核告诉“我真提交给磁盘了”。strace 是最轻量、最贴近用户态的入口,但它只管进程视角;配合 perf 和 /proc 接口,才能串起从 syscall 到块层的全链路。

strace 跟踪 write/read 系统调用耗时
strace 能暴露进程在 I/O 上卡多久,尤其适合定位同步写、小文件读、日志刷盘类问题:

  • 对指定进程跟踪关键 I/O 系统调用:
    strace -p $(pgrep -f "your-app") -e trace=write,read,fsync,fdatasync -T 2>&1 | grep -E "(write|read|fsync).*="  

    -T 显示每次调用真实耗时(单位秒),重点关注 write 返回前挂住 >10ms、或 fsync 耗时突增的情况。

  • 若看到大量 write 返回快但 fsync 动辄百毫秒,说明是脏页回写压力或磁盘队列深度不足,不是应用代码问题。
  • 注意:strace 无法捕获 mmap + msync 或 page cache 异步回写,这类行为不会出现在 write 调用里。

perf 追踪内核 I/O 路径延迟
当 strace 没发现明显慢点,但 await 高、iotop 看不到活跃进程时,用 perf 下沉到内核路径:

  • 抓取块设备层关键函数耗时(需 root):
    perf record -e 'block:block_rq_issue,block:block_rq_complete' -a -- sleep 10  
    perf script | awk '{if($5=="R" && $6>1000000) print $0}' | head -20  

    这里筛选出单次 I/O 请求(R=read/W=write)从 issue 到 complete 耗时超 1ms 的事件,直接反映硬件/驱动级延迟毛刺。

    Browser Setup (No-Root Linux)
    Browser Setup (No-Root Linux)

    在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...

    下载
  • 查看 I/O 在调度器和队列中的停留时间:
    perf record -e 'block:block_rq_insert,block:block_rq_issue' -a -- sleep 5  
    perf script | awk '{print $5,$6,$7}' | sort -k3n | tail -10  

    若 block_rq_insert 和 block_rq_issue 时间差大(>1ms),说明请求在电梯调度器或队列里排队,不是磁盘慢,是 scheduler 配置或 queue depth 不匹配。

/proc 接口验证底层排队状态
strace 和 perf 都是采样,最终要落到 /proc/diskstats 看真实累积:

  • 每 2 秒对比一次第 9 列(aveq,加权队列长度)和第 11 列(await 的原始累加值):
    awk '{print $9,$11}' /proc/diskstats | grep nvme0n1  
    sleep 2  
    awk '{print $9,$11}' /proc/diskstats | grep nvme0n1  

    若 aveq 持续增长、await 累加值跳变大,说明 I/O 正在块层排队,此时查 /sys/block/nvme0n1/queue/scheduler:NVMe 设备必须为 none,若显示 mq-deadline,就是调度器强行串行化导致延迟升高。

  • 同时检查 dmesg | grep -i "nvme\|error\|timeout",PCIe 链路重传、ACPI 电源状态异常等硬件层问题,strace 和 iostat 完全不体现,但会让 await 毛刺式飙升。

不复杂但容易忽略

相关文章

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

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

下载

相关标签:

linux

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

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

880

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2632

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

876

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

789

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

394

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2376

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4392

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

707

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习