第77章:磁盘 IO 优化

第七十七章:磁盘 IO 优化

77.1 IO 分析

iostat 使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 安装
sudo apt install sysstat

# 基本使用
iostat -x 1

# 输出解读:
# %util: IO 占用率,100% = 饱和
# await: 平均 IO 等待时间(毫秒)
# avgqu-sz: 平均队列长度
# r/s, w/s: 每秒读写次数
# rkB/s, wkB/s: 每秒读写 KB

iotop 进程监控

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 安装
sudo apt install iotop

# 实时监控
sudo iotop

# 只显示有 IO 的进程
sudo iotop -o

# 查看累计 IO
sudo iotop -a

# 快捷键
# 左右箭头: 排序
# r: 反向排序
# q: 退出

IO 瓶颈分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 1. 检查 CPU 等待 IO
# 如果 %iowait 高,说明 CPU 在等待 IO
vmstat 1

# 2. 检查磁盘使用率
iostat -x 1
# %util 接近 100% 说明磁盘饱和

# 3. 检查 IO 队列
iostat -x
# avgqu-sz > 1 说明有队列积压

# 4. 检查 IO 延迟
iostat -x 1
# await > 100ms 说明 IO 慢

77.2 文件系统优化

选择合适的文件系统

文件系统特点适用场景
ext4通用、稳定默认选择
XFS大文件、高并发数据库、日志
Btrfs快照、校验需要数据保护
ZFS高级功能存储服务器

挂载选项优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# noatime: 不记录访问时间(提升性能)
# nodiratime: 不记录目录访问时间
# nobarrier: 关闭写入屏障(提升性能,但可能丢数据)
# data=writeback: 日志模式(比 ordered 快)

# 挂载示例
sudo mount -o noatime,nodiratime,noexec /dev/sda1 /mnt

# 查看当前挂载选项
mount | grep sda1

# 永久生效(/etc/fstab)
UUID=xxx / ext4 defaults,noatime,nodiratime 0 1

ext4 优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 创建时指定特性
mkfs.ext4 -O extent,uninit_bg /dev/sda1

# 调整日志大小
tune2fs -J size=4096 /dev/sda1

# 关闭访问时间
tune2fs -o noatime /dev/sda1

# 检查和修复
sudo fsck.ext4 -p /dev/sda1

XFS 优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# XFS 特性
# - 大文件支持(8EB)
# - 高并发
# - 日志优化

# 创建时优化
mkfs.xfs -f -l size=128m,lazy-count=1 /dev/sda1

# XFS 调优参数
# noatime 已在 XFS 默认启用

磁盘 IO 调度算法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 查看当前调度器
cat /sys/block/sda/queue/scheduler

# 可用调度器:
# - mq-deadline: 适合 SSD
# - none: 适合 NVMe/SSD
# - bfq: 适合桌面/多媒体
# - kyber: 适合服务器

# 临时修改
echo mq-deadline > /sys/block/sda/queue/scheduler

# 永久修改(udev)
sudo nano /etc/udev/rules.d/60-scheduler.rules

# 添加:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="mq-deadline"
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none"

本章小结

本章我们学习了磁盘 IO 优化的核心知识:

工具/参数用途
iostatIO 统计
iotop进程 IO 监控
noatime禁用访问时间
调度算法IO 调度策略

IO 优化检查清单:

graph LR
    A[监控 IO] --> B{瓶颈在哪?}
    B -->|%util高| C[更换更快磁盘]
    B -->|await高| D[优化文件系统]
    B -->|%iowait高| E[减少IO请求]
    C --> F[持续监控]
    D --> F
    E --> F

💡 温馨提示: 磁盘 IO 往往是系统最慢的部分。能用内存缓存的就用内存,能用 SSD 就用 SSD,能顺序读写就别随机!


第七十七章:磁盘 IO 优化 — 完结! 🎉

下一章我们将学习"网络优化",掌握 TCP 调优和网络分析技能。敬请期待! 🚀

最后修改 March 24, 2026: 新增JavaScript教程 (37305c4)