什么是平均负载LoadAverage

小文blog小文 2018-12-05 12:16 214人围观

当发现服务器卡慢的时候,我们首先会执行uptime或top命令,来了解系统的平均负载。

# uptime
11:31:04 up 51 min,  1 user,  load average: 0.21, 0.34, 0.35
//11:31:04   当前时间
//51 min     系统运行多少时间
//1 user     正在登录的用户

最后三个就是系统在过去1分钟、5分钟、15分钟的平均负载

之前我一直以为平均负载的参数就是cpu的使用率,但是这是不准确的。平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,和cpu并没有直接的关系。

可运行状态进程也就是ps命令下的R进程,是正在使用cpu或正在等待cpu的进程。

不可中断状态进程是进程正在和硬件交互,为保证安全和一致性,该进程不能被打断。

所以平均负载就是平均活跃进程数。

那么最理想的情况是每个cpu都运行一个进程,比如我的系统,cpu为1核心,最近1分钟有平均0.21进程运行,最近5分钟只有平均0.34进程运行,最近15分钟平均0.35进程运行。

平均负载多少合理

先查看下系统的cpu数量

# grep 'model name' /proc/cpuinfo | wc -l
1

如果大于cpu数量, 那么肯定是过载的。

如果等于cpu数量,说明所有的cpu刚好被用完。

只有小于cpu数量,才说明没有负载,那么多少合适呢,一般来说低于百分之70即可。

但是也要关心三个指标的趋势,如果是升高的,说明系统负载在不断降低,如果是降低的,要警惕一下,最近负载升高,会不会持续升高?

平均负载和CPU使用率

平均负载升高会不会导致cpu使用率升高?

答案是否定的。

cpu密集型进程,会导致cpu繁忙进而导致负载的升高,此时cpu使用率高。

大量等待cpu调度的进程也会导致负载升高,此时cpu使用率高。

但是io密集型进程,等待io也会导致平均负载升高,cpu不一定高。

所以负载和cpu并没有直接关系。

工具

sysstat包含了常用的Linux性能工具,用来监控和分析系统的性能。比如mpstat(多核cpu性能分析)、pidstat(进程性能分析,实时查看进程的cpu,内存,io及上下文切换)

//mpstat -P ALL 5 监控所有cpu每5秒输出一组数据
# mpstat -P ALL 5
11:59:41 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:59:46 AM  all   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00
11:59:46 AM    0   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00
# pidstat -u 5 1
12:02:32 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
12:02:37 PM     0     28119    0.20    0.00    0.00    0.20     0  watch
12:02:37 PM     0     28618   99.40    0.00    0.00   99.40     0  stress

上面使用stress进程导致的(stress --cpu 1 --timeout 600 模拟CPU密集型,stress还可以模拟io密集型,多进程场景)

总结

平均负载高有可能是CPU密集型进程导致的

平均负载高并不一定代表cpu使用率高,还有可能io更繁忙了

发现负载高的时候,使用mpstat和pidstat分析原因。


转载请注明来自小文blog,本文标题:什么是平均负载LoadAverage

发布评论
生活是一场戏,主角当累了,你亦可成为观众,停下脚步,歇一歇