在开始调优前,首先需要监控和识别瓶颈:
iostat -x 1
查看磁盘IO统计iotop -o
查看实时IO进程vmstat 1
查看系统整体IO情况dstat -d
综合监控工具sar -d 1
系统活动报告工具在/etc/fstab
中调整挂载参数:
# 对于SSD
UUID=xxxx / xfs defaults,noatime,nodiratime,discard 0 0
# 对于HDD
UUID=xxxx / ext4 defaults,noatime,nodiratime,data=writeback,barrier=0 0 0
常用参数:
- noatime/nodiratime
: 减少访问时间更新
- discard
: SSD TRIM支持
- data=writeback
: 更激进的写入策略
- barrier=0
: 禁用写入屏障(有风险)
cat /sys/block/sdX/queue/scheduler
临时修改:
echo deadline > /sys/block/sdX/queue/scheduler
永久修改(GRUB配置):
# 在/etc/default/grub中添加
GRUB_CMDLINE_LINUX_DEFAULT="... elevator=deadline"
# 查看当前队列深度
cat /sys/block/sdX/queue/nr_requests
# 设置队列深度(通常128-256)
echo 256 > /sys/block/sdX/queue/nr_requests
# 查看当前预读值
blockdev --getra /dev/sdX
# 设置预读值(SSD可设为8或16)
blockdev --setra 16 /dev/sdX
在/etc/sysctl.conf
中添加:
# 增加脏页回写阈值
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
# 调整swappiness(SSD建议设为1-10)
vm.swappiness = 10
# 调整IO调度参数
vm.vfs_cache_pressure = 50
应用修改:
sysctl -p
使用ionice
调整进程IO优先级:
ionice -c2 -n0 -p PID
数据库应用:
对大文件操作使用O_DIRECT
标志
通过以上方法,可以显著提高Linux系统的磁盘IO性能,但需要根据具体应用场景和工作负载进行针对性调整。