返回列表 发布新帖
查看: 30|回复: 0

Linux 磁盘 I/O 优化指南

发表于 3 天前 | 查看全部 |阅读模式

这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在 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 情况
  1. iostat -x 1
复制代码
关键指标解释:
%util:设备利用率,超 80% 就说明磁盘可能忙不过来了
await:请求平均等待时间,单位 ms,越高越严重
r/s, w/s:读写次数/秒
安装方法:yum install sysstat 或 apt install sysstat

2. 实时监控 I/O 进程
  1. iotop
复制代码
可以看到哪个进程读写最频繁,支持排序、过滤
安装方法:yum install iotop 或 apt install iotop

3. 查看文件系统/目录占用
  1. du -sh /var/log/*
  2. du -sh /* | sort -h
复制代码
找出大文件或异常增长目录

4. 检查硬盘健康状态
  1. smartctl -a /dev/sda
复制代码
查看磁盘是否出现故障、坏块
安装方法:yum install smartmontools

四、磁盘 I/O 优化建议
日志归档与定期清理
定期清理 /var/log 下的日志文件
  1. logrotate
  2. journalctl --vacuum-time=7d
复制代码
数据库优化:
确保表有索引,避免大查询
使用 innodb_flush_log_at_trx_commit=2 减少写入次数(MySQL)
使用 SSD 或分离数据盘:
把数据库或高读写服务独立挂载在 SSD 上
将 /tmp、/var/lib/mysql、/var/cache 单独分区
文件系统优化:
使用 ext4 或 xfs,比 ext3 更高效
挂载时加参数如 noatime 可减少写入
例如:
  1. UUID=xxx /data ext4 defaults,noatime 0 2
复制代码
减少不必要的写入:
缓存类应用如 Redis、Nginx 日志适当减量
调整程序写入逻辑,避免频繁 flush 或 log
调整 I/O 调度器:
查看当前调度器
  1. cat /sys/block/sda/queue/scheduler
复制代码
修改为 deadline(适合数据库)、noop(适合 SSD):
  1. echo deadline > /sys/block/sda/queue/scheduler
复制代码
磁盘 I/O 一旦吃紧,所有服务都会跟着卡,所以定期监控 + 有针对性优化是很重要的。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2025 Suike Tech All Rights Reserved. 随客交流社区 (备案号:津ICP备19010126号) |Processed in 0.098044 second(s), 7 queries , Gzip On, MemCached On.
关灯 在本版发帖返回顶部
快速回复 返回顶部 返回列表