Linux服务器IO性能优化需先定位瓶颈再针对性配置:一、用iostat -x 1、iotop -o、vmstat 1诊断磁盘饱和度、高IO进程及iowait;二、按硬件选调度器(NVMe用none、HDD用mq-deadline);三、挂载参数优化(noatime,nodiratime、SSD加discard);四、调优脏页参数与swappiness;五、用cgroup控制IO优先级。

Linux 服务器 IO 性能优化不是堆参数,而是分层诊断、按需配置。核心思路是:先看清瓶颈在哪(磁盘?调度器?文件系统?内核缓存?),再针对性调,避免盲目改造成新问题。
一、先定位真实瓶颈
不看指标就调优,等于蒙眼开车。重点盯这三个命令的输出:
- iostat -x 1:关注 %util(持续 >90% 表示设备饱和)、await(平均等待时间,>10ms 值得警惕)、w/s(IOPS)
- iotop -o:找出真正吃 I/O 的进程,区分是前台业务还是后台任务(如 rsync、logrotate)
- vmstat 1:看 bi/bo(块输入/输出 KB/s)、wa(iowait 百分比),wa 高说明 CPU 在等磁盘
二、按硬件类型选对 IO 调度器
调度器不是越“智能”越好,关键是匹配硬件特性:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
NVMe / SSD:用 none 或 kyber。NVMe 自身队列深度大、延迟低,内核调度反而增加开销;
echo none > /sys/block/nvme0n1/queue/scheduler - SATA/SAS SSD:可试 kyber 或 mq-deadline,平衡响应与吞吐
- HDD:优先 mq-deadline,兼顾延迟和吞吐;若需更公平调度(如多租户环境),启用 bfq,但注意它会略微降低峰值 IOPS
三、文件系统挂载优化(实测有效)
加在 /etc/fstab 对应行的 defaults 后面,用逗号分隔:
-
所有类型磁盘都建议加:
noatime,nodiratime—— 省掉每次读文件都更新访问时间的写操作 -
SSD 必加:
discard(启用 TRIM)+barrier=0(现代 SSD 已内置断电保护,关屏障可降延迟) -
HDD 或数据库场景慎用:
data=writeback(日志只记元数据,不记文件内容,提升写速但有丢数据风险);更稳妥选data=ordered
四、内核缓存与脏页控制
避免突发写入压垮磁盘,让内核平滑回写:
- 编辑
/etc/sysctl.conf,追加: -
vm.dirty_background_ratio = 5—— 脏页占内存 5% 时,后台线程开始异步回写 -
vm.dirty_ratio = 10—— 脏页达 10% 时,进程阻塞式同步回写(防爆满) -
vm.swappiness = 1—— 极端抑制 swap,防止内存压力下触发大量 swap I/O
五、进阶:用 cgroup 控制 I/O 优先级
当必须保障关键服务(如数据库)的磁盘响应时:
- 确认内核支持:
cat /proc/cgroups | grep blkio(enabled 为 1)且调度器为cfq(仅旧内核或特定场景需要) - 创建 cgroup 并设权重:
mkdir -p /cgroup/blkio/db; echo 800 > /cgroup/blkio/db/blkio.weight - 把数据库进程加入:
echo [pid] > /cgroup/blkio/db/cgroup.procs - 后台备份进程设低权:
echo 100 > /cgroup/blkio/backup/blkio.weight


















