NOTE

5.5 磁盘调优

1. 磁盘性能指标 1.1. 文件系统 I/O 性能指标 1.1.1. 存储空间使用情况 容量、使用量以及剩余空间等 1.1.2. 缓存使用情况 页缓存、目录项缓存、索引节点缓存以及各个具体文件系统(如 ext4、XFS 等)的缓存 1.2. 磁盘 I/O 性能指标 1.2.1. 使用率 磁盘忙处理

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 磁盘性能指标

1.1. 文件系统 I/O 性能指标

1.1.1. 存储空间使用情况

容量、使用量以及剩余空间等

1.1.2. 缓存使用情况

页缓存、目录项缓存、索引节点缓存以及各个具体文件系统(如 ext4、XFS 等)的缓存

1.2. 磁盘 I/O 性能指标

1.2.1. 使用率

磁盘忙处理 I/O 请求的百分比

1.2.2. IOPS

每秒的 I/O 请求数

1.2.3. 吞吐量

每秒的 I/O 请求大小

1.2.4. 响应时间

从发出 I/O 请求到收到响应的间隔时间

2. 磁盘性能工具

2.1. df

df.md(关联笔记尚未公开)

2.2. iostat

iostat.md

2.3. pidstat

pidstat.md

2.4. strace

strace.md

2.5. lsof

lsof.md(关联笔记尚未公开)

3. 如何分析磁盘性能瓶颈

3.1. 查看是否IO瓶颈

  • top命令查看CPU负载(load average)和CPU使用率(%Cpu),如果前者高,后者低那么是网络IO或者磁盘IO瓶颈
  • 数据从磁盘到内核使用的是DMA copy,不消耗CPU,CPU的状态是iowait(iowait是idle的一种,也就是空闲状态)程序的状态视IO模型而定
    • 同步阻塞:正常来说CPU是空闲,但是服务器编程下一般配合多线程使用,CPU就会忙于线程切换
    • 同步非阻塞:CPU忙于上下文切换
    • IO多路复用:CPU不忙,一个CPU足够
  • 数据从内核到应用使用的是CPU copy,消耗CPU+程序的状态是阻塞=CPU的状态是sys(内核态)

3.2. 查看是否磁盘IO瓶颈

  • top查看iowait是否比较高,是的话可能是磁盘IO瓶颈;iostat -xdk 1 10查看ioutil是否比较高,是的话确实是磁盘IO瓶颈

3.3. 找到IO占用高的进程

  • pidstat -d 1 10定位出读写操作比较多的进程
  • ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr

3.4. 分析进程

  • strace -f -T -tt -p PID查看进程在干啥
  • lsof -p PID查看进程操作什么文件

4. 参考