Linux I/O 性能瓶颈定位与调优

2026-04-23 16:54:57 1723

Linux I/O 性能瓶颈定位与调优

欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。

线上系统“变慢”,很多人第一反应是 CPU 或内存,但真实场景中,磁盘 I/O 才是最隐蔽的瓶颈。尤其是在日志写入、数据库、高并发文件操作场景中,I/O 一旦打满,整体性能会断崖式下降。




先从最基础但最有效的工具开始:

iostat -x 1

关键指标解读:

· r/s, w/s:每秒读写次数

· rkB/s, wkB/s:吞吐量

· await:平均等待时间(最关键)

· %util:磁盘利用率

如果你看到:

await: 50ms+

%util: 100%

基本可以确认磁盘已经成为瓶颈。




进一步定位哪个进程在“疯狂写盘”:

iotop -o

只显示有 I/O 的进程,重点关注:

· 写入持续占用高的进程

· 突发型 I/O(可能是日志或批处理)




很多时候问题不是“写得多”,而是“写得不合理”。

例如频繁小文件写入:

# 错误示例

with open("log.txt", "a") as f:

    f.write("something\\n")

在高并发下会导致:

· 大量 syscall

· 磁盘随机写放大

优化方式:批量写 + 缓冲

# 优化示例

buffer = []

for i in range(1000):

    buffer.append("something\\n")

 

with open("log.txt", "a") as f:

    f.writelines(buffer)




再看一个常见问题:fsync 过于频繁。

数据库或日志系统如果每次写都调用 fsync,会导致:

· IOPS 被迅速耗尽

· 延迟剧增

可以通过 strace 观察:

strace -p <pid> -e fsync

如果调用频率极高,需要调整策略(如批量提交、异步刷盘)。




文件系统层面优化也非常关键。

查看挂载参数:

mount | grep ext4

如果看到:

data=ordered

可以考虑(视业务风险):

mount -o remount,data=writeback /data

提升写性能(但降低一致性保障)。




noatime 是一个简单但有效的优化:

mount -o remount,noatime /data

避免每次读取文件都更新访问时间。




块设备调度器也会影响性能:

cat /sys/block/sda/queue/scheduler

常见类型:

· cfq(默认,适合通用)

· deadline(适合数据库)

· noop(适合 SSD)

切换示例:

echo deadline > /sys/block/sda/queue/scheduler




再看一个容易被忽略的点:page cache。

Linux 会缓存磁盘数据,如果缓存命中率低,就会频繁访问磁盘。

查看:

free -m

关注:

· buff/cache 是否充足

· 是否频繁 swap

可以手动观察缓存效果:

cat /proc/meminfo | grep Dirty

Dirty 数据过多,说明写入压力大。




高并发场景下,RAID 或云盘性能也要注意:

lsblk -o NAME,SIZE,ROTA

· ROTA=1:机械盘

· ROTA=0SSD

机械盘在随机 I/O 下性能会急剧下降。




实战排查流程总结:

iostat -x 1          # 看是否 I/O 打满

iotop -o             # 找到罪魁祸首

strace -e fsync      # 判断是否频繁刷盘

mount                # 检查文件系统参数




核心优化经验:

· await  %util 更能反映真实延迟

· 小文件高频写入是性能杀手

· fsync 策略决定系统上限

· SSD + 合理调度器 是基础保障

· Page Cache 利用不好,磁盘一定吃紧

在高性能系统中,磁盘不是“慢设备”,而是“被错误使用的设备”。理解 I/O 行为,比盲目升级硬件更重要。

 

蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,蓝队云期待与你一起探索。

 

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: