Linux 磁盘 I/O 优化指南
在 Linux 运维过程中,磁盘 I/O(输入输出)性能问题是导致系统变慢、服务卡顿、网页超时的重要原因之一。尤其是数据库、高并发站点、日志密集型服务,更容易受 I/O 限制影响。本文将从以下几个方面讲清楚如何判断、排查和优化磁盘 I/O:一、如何判断系统 I/O 有瓶颈
二、常见 I/O 导致的问题
三、常用工具与排查方法
四、优化建议(实战操作)
一、如何判断系统 I/O 有瓶颈
出现以下现象时,可能就是 I/O 过载了:
系统突然卡顿、top load 爆高
网站响应慢甚至超时
磁盘使用 100%,但读写速度不高
数据库执行变慢
服务日志积压严重
二、常见磁盘 I/O 问题原因
日志或缓存疯狂写盘
数据库无索引、频繁全表扫描
SSD 换成 HDD,性能差距大
程序读写不规范(频繁小文件操作)
有定时任务同时跑,占用大量 I/O
文件系统损坏,导致读写异常
三、磁盘 I/O 排查方法
1. 查看整体 I/O 情况
iostat -x 1关键指标解释:
%util:设备利用率,超 80% 就说明磁盘可能忙不过来了
await:请求平均等待时间,单位 ms,越高越严重
r/s, w/s:读写次数/秒
安装方法:yum install sysstat 或 apt install sysstat
2. 实时监控 I/O 进程
iotop可以看到哪个进程读写最频繁,支持排序、过滤
安装方法:yum install iotop 或 apt install iotop
3. 查看文件系统/目录占用
du -sh /var/log/*
du -sh /* | sort -h找出大文件或异常增长目录
4. 检查硬盘健康状态
smartctl -a /dev/sda查看磁盘是否出现故障、坏块
安装方法:yum install smartmontools
四、磁盘 I/O 优化建议
日志归档与定期清理
定期清理 /var/log 下的日志文件
logrotate
journalctl --vacuum-time=7d数据库优化:
确保表有索引,避免大查询
使用 innodb_flush_log_at_trx_commit=2 减少写入次数(MySQL)
使用 SSD 或分离数据盘:
把数据库或高读写服务独立挂载在 SSD 上
将 /tmp、/var/lib/mysql、/var/cache 单独分区
文件系统优化:
使用 ext4 或 xfs,比 ext3 更高效
挂载时加参数如 noatime 可减少写入
例如:
UUID=xxx /data ext4 defaults,noatime 0 2减少不必要的写入:
缓存类应用如 Redis、Nginx 日志适当减量
调整程序写入逻辑,避免频繁 flush 或 log
调整 I/O 调度器:
查看当前调度器
cat /sys/block/sda/queue/scheduler修改为 deadline(适合数据库)、noop(适合 SSD):
echo deadline > /sys/block/sda/queue/scheduler磁盘 I/O 一旦吃紧,所有服务都会跟着卡,所以定期监控 + 有针对性优化是很重要的。
页:
[1]