理解linux平均负载
简介
平均负载最理想的情况是等于 CPU 个数。查看CPU
grep 'model name' /proc/cpuinfo | wc -l
综合查看平均负载的三个数值分析系统负载趋势的数据,可以能更全面、更立体地理解目前的负载状况。
假设我们在一个单 CPU 系统上看到平均负载为 1.73,0.60,7.98,那么说 明在过去 1 分钟内,系统有 73% 的超载,而在 15 分钟内,有 698 % 的超载,从整体趋势来 看,系统的负载在降低。
当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。一旦 负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。
平均负载是指单位时间内,处于可运行状态和不可中断状 态的进程数。所以,它不仅包括了正在使用CPU的进程,还包括等待CPU 和等待 I/O的进程,而CPU使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。例如:
- CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的。
- I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高。
- 大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
分析工具
使用iostat、mpstat、pidstat 等工具,找出平均 负载升高的根源。
1. CPU密集型进程
$ uptime
# -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据
$ mpstat -P ALL 5
# 间隔 5 秒后输出一组数据
$ pidstat -u 5 1
平均负载的升高是由于 CPU使用率 的升高
2. I/O 密集型进程
# 显示所有 CPU 的指标,并在间隔 5 秒输出一组数据
$ mpstat -P ALL 5 1
# 间隔 5 秒后输出一组数据,-u 表示 CPU 指标
$ pidstat -u 5 1
平均负载的升高是由于 iowait 的升高
3. 大量进程的场景
当系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU 的进程。
$ uptime
# 间隔 5 秒后输出一组数据,-u 表示 CPU 指标
$ pidstat -u 5 1
多进程在争抢有限CPU,每个进程等待CPU的时间(也就是代码块中的 %wait 列)高。这些超出CPU计算能力的进程,最终导致 CPU 过载。
更多
# 查看高IO进程
$ ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr