- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
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=0:SSD
机械盘在随机 I/O 下性能会急剧下降。
实战排查流程总结:
iostat -x 1 # 看是否 I/O 打满
iotop -o # 找到罪魁祸首
strace -e fsync # 判断是否频繁刷盘
mount # 检查文件系统参数
核心优化经验:
· await 比 %util 更能反映真实延迟
· 小文件高频写入是性能杀手
· fsync 策略决定系统上限
· SSD + 合理调度器 是基础保障
· Page Cache 利用不好,磁盘一定吃紧
在高性能系统中,磁盘不是“慢设备”,而是“被错误使用的设备”。理解 I/O 行为,比盲目升级硬件更重要。
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP