Linux系统的存储性能直接影响整体服务的运行效率,当业务出现读写延迟高、IO等待时间长的问题时,需要从多个维度排查并优化存储相关配置。

调整磁盘调度算法
Linux内核提供了多种磁盘调度算法,不同的算法适用于不同的业务场景,合理选择调度算法可以显著提升IO性能。
常见的调度算法包括noop、deadline、cfq,查看当前磁盘的调度算法可以使用以下命令:
# 查看sda磁盘的当前调度算法 cat /sys/block/sda/queue/scheduler
临时修改调度算法的命令如下:
# 将sda磁盘的调度算法改为deadline echo deadline > /sys/block/sda/queue/scheduler
如果需要永久生效,可以修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX参数中添加elevator=deadline,然后执行update-grub命令更新引导配置。
优化文件系统参数
不同的文件系统有不同的优化参数,以常用的ext4文件系统为例,可以通过调整挂载参数提升性能。
修改/etc/fstab文件中的ext4挂载配置,添加以下参数:
- noatime:禁止更新文件的访问时间,减少不必要的写操作
- data=writeback:数据写入模式调整为回写模式,提升写入性能,不过异常断电可能有数据风险
- barrier=0:关闭写屏障,适合有备用电源的存储场景,可提升写入速度
修改后的fstab配置示例:
/dev/sda1 / ext4 defaults,noatime,data=writeback,barrier=0 0 1
修改完成后执行mount -a重新挂载文件系统使配置生效。
调整IO队列相关参数
磁盘的IO队列深度和请求大小也会影响存储性能,可以根据业务场景调整相关参数。
查看当前IO队列深度:
cat /sys/block/sda/queue/nr_requests
临时调整队列深度:
# 将队列深度调整为1024 echo 1024 > /sys/block/sda/queue/nr_requests
调整单次IO请求的最大大小:
# 将最大IO请求大小调整为1MB echo 1048576 > /sys/block/sda/queue/max_sectors_kb
清理无用数据与优化存储空间
存储空间不足或者碎片过多也会导致存储性能下降,定期清理无用数据可以维持性能稳定。
- 清理系统日志:定期清理
/var/log目录下过期的日志文件,避免日志占满磁盘 - 删除无用的大文件:使用
du -sh /*命令排查占用空间大的目录,删除不需要的文件 - 清理缓存:使用
sync && echo 3 > /proc/sys/vm/drop_caches命令清理系统页缓存、目录项缓存和inode缓存,释放内存占用
使用工具监控存储性能
优化完成后需要持续监控存储性能,确认优化效果,常用的监控工具包括iostat、iotop。
使用iostat查看磁盘IO状态:
# 每2秒输出一次磁盘IO状态 iostat -x 2
使用iotop查看占用IO高的进程:
# 查看实时IO占用情况 iotop
通过监控工具可以及时发现存储性能瓶颈,针对性调整优化策略。