在优化之前,先使用以下工具诊断当前性能瓶颈:
iostat - 监控磁盘I/O统计
iostat -x 1
关注%util
(利用率)和await
(平均等待时间)
vmstat - 查看系统整体I/O情况
vmstat 1
iotop - 查看进程级I/O使用情况
iotop -o
blktrace - 深入分析块设备I/O
blktrace -d /dev/sda -o - | blkparse -i -
选择合适文件系统:
挂载选项优化:
# ext4示例
mount -o noatime,nodiratime,data=writeback,discard /dev/sda1 /mnt/data
# XFS示例
mount -o noatime,nodiratime,allocsize=64m,largeio,inode64 /dev/sdb1 /mnt/data
查看当前调度器:
cat /sys/block/sda/queue/scheduler
修改调度器(临时):
echo deadline > /sys/block/sda/queue/scheduler
常见调度器选择: - deadline - 适合大多数场景 - noop - 适合SSD或虚拟化环境 - cfq - 适合传统机械硬盘
编辑/etc/sysctl.conf
:
# 增加文件描述符限制
fs.file-max = 1000000
# 增加脏页回写阈值
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
# 调整虚拟内存行为
vm.swappiness = 10
# 网络相关(对NFS/Samba重要)
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
应用修改:
sysctl -p
RAID级别选择:
条带大小调整:
mdadm --create /dev/md0 --level=10 --raid-devices=4 --chunk=256 /dev/sd[b-e]
启用TRIM:
fstrim -v /
或添加到cron定期执行
调整I/O调度器为noop或deadline
禁用访问时间记录:
mount -o remount,noatime /
O_DIRECT
标志绕过页面缓存(适合自己开发的应用)fallocate
预分配空间使用内存文件系统:
mount -t tmpfs -o size=1G tmpfs /mnt/ramdisk
使用bcache或flashcache将SSD作为缓存
考虑分布式文件系统如Ceph或GlusterFS(适合大规模存储)
设置定期监控:
# 记录历史I/O数据
sar -d 1 10 > disk_stats.log
定期检查文件系统碎片化程度(XFS):
xfs_db -c frag -r /dev/sda1
通过以上方法的组合应用,可以显著提升Linux系统的文件读写性能。具体优化方案应根据实际工作负载和硬件配置进行调整。