NOTE
5.5 磁盘调优
1. 磁盘性能指标 1.1. 文件系统 I/O 性能指标 1.1.1. 存储空间使用情况 容量、使用量以及剩余空间等 1.1.2. 缓存使用情况 页缓存、目录项缓存、索引节点缓存以及各个具体文件系统(如 ext4、XFS 等)的缓存 1.2. 磁盘 I/O 性能指标 1.2.1. 使用率 磁盘忙处理
这是历史学习笔记,可能存在过时或不完整的理解。
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
2.3. pidstat
2.4. strace
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查看进程操作什么文件