理解平均负载

2023-02-05  本文已影响0人  _Irving
uptime命令
[test@localhost bin]$ uptime
 22:02:14 up  3:34,  2 users,  load average: 0.00, 0.01, 0.05
#22:02:14   //当前时间
#up  3:34    //系统运行时间
#2 users  //正在登陆用户数
#load average  //分别是:近1分钟、5分钟、15分钟的系统平均负载

既然平均的是平均活跃进程数,那么最理想的,就是每个cpu上都刚好运行着一个进程,这样每个cpu都得到充分利用。

分析平均负载为多少时合理

我们知道,平均负载最理想的情况是等于cpu个数,所以在评判平均负载时,首先你要知道系统有几个cpu,这可以通过top命令,或者从文件 /proc/cpuinfo中读取:

[wanchao@localhost ~]$ grep 'model name' /proc/cpuinfo |wc -l
1
[wanchao@localhost ~]$ cat /proc/cpuinfo |grep 'processor' |wc -l
1
[wanchao@localhost ~]$ cat /proc/cpuinfo |grep 'cpu cores' |uniq
cpu cores   : 1

有了cpu个数,我们就可以判断出,当平均负载比cpu个数还大的时候,系统就已经出现了过载。如果1分钟、5分钟、15分钟三个值基本相同,或者相差不大,那就说明系统负载很平稳。
如果一分钟的值远小于15分钟的值,就说明系统最近1分钟的负责在减少,而过去15分钟内却有很大的负载;
反过来如果一分钟的值远大于15分钟的值,就说明最近1分钟的负载在增加,增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。
再举个例子,假设我们在一个单 CPU 系统上看到平均负载为 1.73,0.60,7.98,那么说明在过去 1 分钟内,系统有 73% 的超载,而在 15 分钟内,有 698% 的超载,从整体趋势来看,系统的负载在降低。

那么,在实际生产环境中,平均负载多高时,需要我们重点关注呢?
在我看来,当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。
但 70% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。当发现负载有明显升高趋势时,比如说负载翻倍了,你再去做分析和调查。

扩展:
[wanchao@localhost softwares]$ top -H -p 22452     //-H显示线程,-p按cpu占用排序
top - 19:23:24 up  7:47,  4 users,  load average: 1.05, 0.85, 0.45
Threads:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s):100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1868660 total,  1191732 free,   189008 used,   487920 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1479500 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                             
 22452 root      20   0   41856   3276   1348 R 99.7  0.2   7:53.84 stress-ng-cpu  
[wanchao@localhost softwares]$ watch -d uptime
[root@localhost ~]# mpstat -P ALL 5 1   
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain)     02/07/23    _x86_64_    (1 CPU)

00:02:58     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
00:03:03     all    0.00    0.00   99.19    0.00    0.00    0.81    0.00    0.00    0.00    0.00
00:03:03       0    0.00    0.00   99.19    0.00    0.00    0.81    0.00    0.00    0.00    0.00

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.00    0.00   99.19    0.00    0.00    0.81    0.00    0.00    0.00    0.00
Average:       0    0.00    0.00   99.19    0.00    0.00    0.81    0.00    0.00    0.00    0.00

pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标

[root@localhost ~]# pidstat -u 5 1
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain)     02/07/23    _x86_64_    (1 CPU)

00:04:04      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
00:04:09        0       587    0.00    0.40    0.00    0.00    0.40     0  kworker/u256:31
00:04:09        0      1503    0.20    0.00    0.00    0.00    0.20     0  tuned
00:04:09        0      4744    0.20   98.62    0.00    0.00   98.81     0  stress-ng-io
00:04:09        0      4754    0.20    0.00    0.00    0.00    0.20     0  pidstat

Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        0       587    0.00    0.40    0.00    0.00    0.40     -  kworker/u256:31
Average:        0      1503    0.20    0.00    0.00    0.00    0.20     -  tuned
Average:        0      4744    0.20   98.62    0.00    0.00   98.81     -  stress-ng-io
Average:        0      4754    0.20    0.00    0.00    0.00    0.20     -  pidstat
上一篇 下一篇

猜你喜欢

热点阅读