慢文件操作追踪
只打印超过阈值的文件操作及其耗时,输出里包含进程、操作类型与涉及的文件。它把「文件系统卡顿」这种模糊描述落到具体动作上:到底是打开慢、读慢、写慢还是同步慢。由于只输出超阈值的少数记录,非常适合定位偶发问题。
基本信息
| 适用平台 | Linux,需要内核 eBPF 支持与较高权限;不同文件系统有对应的同名工具 |
|---|---|
| 阈值单位 | 毫秒,按灵敏度调整 |
| 输出内容 | 进程、操作类型、文件与耗时 |
| 限制条件 | 工具与文件系统类型必须匹配 |
| 使用建议 | 阈值先高后低,逐步逼近 |
典型使用场景
- 定位偶发的慢读取或慢同步操作,确认是哪个文件引起的。
- 排查日志写入卡顿:写入耗时是否随日志量上升。
- 确认同步写策略造成的延迟,为是否调整策略提供依据。
- 与块层延迟对照,判断慢在文件系统还是底层设备。
- 限定进程观察单个服务的文件操作表现。
常用调用
常用调用
ext4slower-bpfcc 10 # 超过 10 毫秒的 ext4 操作
ext4slower-bpfcc -p 12345 10 # 限定进程,排除其它服务干扰
ext4slower-bpfcc 5 # 阈值放低,观察更细的分布
ext4slower-bpfcc 10 > slow.log # 重定向留档,便于事后核对
wc -l slow.log # 看超阈值操作的规模
awk '{print $NF, $0}' slow.log | sort -g | tail -10 # 找出耗时最长的几条操作类型与含义
| 操作类型 | 含义 | 常见原因 |
|---|---|---|
| 打开 | 路径解析与文件打开 | 目录项过多、元数据操作拥挤 |
| 读取 | 读取数据 | 缓存未命中、预读不足 |
| 写入 | 写入数据 | 写放大、回写压力 |
| 同步 | 等待数据落盘 | 同步策略严格或设备慢 |
输出里的文件路径是重要线索:同一目录或同一文件反复出现在超阈值记录里,问题往往在该文件的访问模式上,而不是整个文件系统。
文件系统类型与工具不匹配时不会输出任何记录,看起来像「没有问题」;使用前先确认系统类型与工具是否对应。