基础概念
1)定义:在单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。
2)区别:需要与单位时间内的CPU使用率正确区分开来。CPU使用率是单位时间内cpu繁忙情况的统计:
情况1:CPU密集型进程,CPU使用率和平均负载基本一致。
情况2:IO密集型进程,平均负载升高,CPU使用率不一定升高。
情况3:大量等待CPU的进程调度,平均负载升高,CPU使用率也升高。
3)可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即ps aux命令下STAT处于R状态的进程。正在等待CPU的进程为什么会导致平均负载升高呢,罪魁祸首就是CPU上下文切换。详细内容见:CPU的上下文切换详解
4)不可中断状态的进程:处于内核态关键流程中的进程,且不可被打断,如等待硬件设备IO响应,即ps aux命令下STAT处于D状态的进程。
5)理想状态:每个CPU上有一个活跃进程,即平均负载数等于CPU数。
6)过载经验值:平均负载高于CPU数量的70%
监控
如何查看CPU数量
命令一:lscpu
命令二:grep 'model name' /proc/cpuinfo | wc -l
如何查看平均负载
静态负载查看命令
# uptime
显示的顺序是最近1分钟、5分钟、15分钟的平均负载,从此可以看出平均负载的趋势。
动态负载查看命令
# watch -d uptime
每2秒更新一次平均负载的值。
分析
一般情况下,当平均负载高于CPU数量70%的时候,就应该分析排查负载高的问题。
使用工具
mpstat:多核的CPU性能分析工具,用来实时查看每个CPU的性能指标,一级所有CPU的平均指标。
pidstat:常用的进程性能分析工具,用来实时查看进程的CPU、内存、IO以及上下文切换等性能指标。
step1:
$ mpstat -P ALL 5
表示监控所有CPU,间隔5秒输出一组数据。详细用法见:mpstat命令详解
step2:
$ pidstat -u 5 1 间隔5秒输出一组数据。详细用法见:pidstat命令详解
不同场景的不同分析结果
前提:CPU的平均负载已过载。
情况1:CPU密集型进程
mpstat:会看到CPU的%usr值会较高,%iowai值正常。
pidstat:会看到特定进程的%usr值较高。
情况2:IO密集型进程
mpstat:会看到CPU的%iowait值会较高,%usr也会相应升高。
pidstat:会看到特定进程的%system和%CPU的值较高。
情况3:大量进程的场景
pidstat:会看到特定进程的%wait的值较高。