目的:
- 利用实例理解LoadAverage这一指标代表的含义
- 当load升高时,能够快速分析定位到问题原因
LoadAverage
是单位时间内的CPU使用率吗?
平均负载指单位时间内,系统处于可运行状态和不可中断状态的的平均进程数
可运行&不可中断
可运行
正在使用CPU或者正在等待CPU的进程,也就是我们使用ps命令可以看到的,处在R状态的进程
不可中断
处在内核态关键流程中的进程。也就是在ps中看到的处在D状态的进程。比如I/O等待,进程向磁盘写数据,为了保证数据一致性,在磁盘回复前,不能被其他进程或者中断打断。其实是系统对进程和硬件设备的一种保护机制
理解
LoadAverage其实是活跃进程数的指数衰减平均值,我们可以将其简单的理解为活跃进程数的平均值。
假设当前平均负载为2
- 在双核系统上,就意味着CPU刚好被完全占用
- 在单核系统上,意味着有一半的进程竞争不到CPU
合理区间值
70%
通过命令grep 'model name' /proc/cpuinfo | wc -l
或者htop数框框SMT(同步多线程)技术能使一个CPU同时执行两个线程,从操作系统调度的角度来看,我们可以将一个四核八线程的处理器视作有八个CPU。
性能问题分析工具
iostat、mpstat、pidstat、htop、ctop
平均负载和CPU使用率
平均负载 = 正在使用CPU + 等待CPU + 等待IO + 进程调度
CPU使用率 = 单位时间内CPU繁忙情况的统计
举例:
- CPU密集进程,大量CPU的使用导致平均负载升高,两者数据相对一致
IO密集进程,等待IO导致平均负载升高,CPU使用率不一定高
案例
stress:系统压力测试工具,模拟平均负载升高
- sysstat:包含了常用的性能工具,用来监控和分析系统性能
- mpstat:CPU性能分析工具,
- pidstat:进程性能分析工具
CPU密集模拟
模拟
设置负载
# 设置四个核心满负载stress --cpu 4 --timeout 600
查看负载变化情况
htop
查看CPU使用率变化
# 监控所有CPU,5秒输出一次mpstat -P ALL 5
哪个进程导致的CPU使用率升高?
pidstat -u 5 1
结论
可以看到4个核心满载,使用率是100%,但是iowait很低,说明这一次平均负载升高就是由于CPU的使用率太高。
IO密集模拟
模拟
设置负载
# 不停的执行syncstress -i 1 --timeout 600
查看负载变化
htop
查看CPU使用率
mpstat -P ALL 5 1
进程占用
pidatat -u 5 1
结论
大量进程调度模拟
模拟
stress -c 20 --timeout 600
查看负载变化
htop
查看CPU使用率
mpstat -P ALL 5 1
进程占用
pidsatat -u 5 1
结论
总结
- 它不是CPU使用率
- 平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。
- 平均负载本身并不能直观的展示性能的瓶颈在哪里。所以在平均负载升高要定位问题的时候,需要合理使用工具,从CPU和IO以及任务调度的角度去分析和定位问题
