聊一聊Load Average

背景

前段时间,由于有几个应用引入了 prometheus-net.DotNetRuntime 这个组件,导致系统 CPU 间歇性飙升。这是这个组件一个已知的雷。。

同样也引发了系统的 Load Average (平均负载) 十分不正常。

这是一台 4C8G 的服务器,Load Average 却是达到了 15。这也是有点离谱!修复之后的是稳定在 4 以下的。

关于平均负载,其实里面的学问很多,只要候选人简历上提到过 Linux 相关的,老黄是一定会问 Load Average 相关的内容的。

所有也花点时间梳理一下吧。

查看平均负载的N种方式

w

 12:02:29 up 25 days, 19:53,  1 user,  load average: 1.28, 0.68, 0.49
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.10.2.219    12:02    1.00s  0.01s  0.00s w

top

Tasks: 142 total,   1 running, 141 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4.7 us,  2.9 sy,  0.0 ni, 91.3 id,  0.0 wa,  0.3 hi,  0.8 si,  0.0 st
MiB Mem :  15604.6 total,    170.4 free,   1771.2 used,  13663.0 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  13522.4 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND             
 287467 root      20   0   22.1g 241512  20400 S   7.3   1.5   1029:52 dotnet
 287675 root      20   0   22.1g 233568  20616 S   7.3   1.5   1043:36 dotnet   

uptime

 12:04:08 up 25 days, 19:55,  1 user,  load average: 0.58, 0.61, 0.49

上面的输出结果,都可以看到 load average 的字样,后面还带了三个数据。

load average: 0.58, 0.61, 0.49

三个数字怎么理解

既然提供了三个数字,那么这三个数字分别代表什么呢?

从左到右,依次是过去 1分钟、 5分钟、 15分钟,系统的平均负载。

通过这三个数字,就可以比较简单的判断系统的负载趋势,上升或下降。

举几个例子来看看。

例子一

1.30 0.90 0.55

这三个数字在告诉我们系统的负载在慢慢上升,运行效率可能会减慢。

因为三个数字依次降低,说明在过去的 1 分钟系统的负载比过去 15 分钟系统的负载大。

例子二

0.45 0.40 0.43

这三个数字在告诉我们系统的负载比较平稳,没有太大的波动。

因为这三个数字相差不大,比较接近。

例子三

0.45 0.70 1.43

这三个数字在告诉我们系统的负载在慢慢下降,运行效率可能会有所提高。

因为三个数字依次上升,说明在过去的 1 分钟系统的负载比过去 15 分钟系统的负载小。

上面的三个例子分析也只是能看出趋势,但是并不确定更加具体一点的信息。

下面看看单个数字的含义。

负载含义

1.43 来说,它是什么意思呢?

如果是单核的机器,比如 1C1G,1C2G,说明系统已经在超负荷运作了,这一个 CPU 已经被完全占用了。

如果是多核的机器,比如 2C4G,4C8G,说明还有空闲的 CPU。

对于 2C 的来说,虽然没有满载,但也超过 70% 了,该留意一下了,因为很可能马上会出现问题。

对于 4C的来说,占用还没有 50%,基本可以不用太担心。

据说有一个经验值,CPU 数量的 0.7

当 Load Average 超过这个经验值的时候,就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。

总结

Load Average 提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。

要分析系统的负载情况,是离不开这三个不同时间间隔的平均值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Load average(负载均衡)是一个表示系统负荷的指标,它通常用于衡量系统的繁忙程度。在Linux系统中,load average通常指的是系统在特定时间间隔内的平均进程数,其值是一个三元组,分别表示1分钟、5分钟和15分钟内的平均值。例如,一个系统的load average为 0.50,1.00,2.00,表示在过去1分钟、5分钟和15分钟内,系统的平均进程数分别为0.50,1.00和2.00。 在Linux系统中,可以使用uptime命令或者/proc/loadavg文件来获取load average值。以下是一个使用C语言获取load average值的示例代码: ```c #include <stdio.h> #include <stdlib.h> void get_load_avg(double *load_avg_1, double *load_avg_5, double *load_avg_15) { FILE *fp; double la1, la5, la15; // 打开/proc/loadavg文件并读取load average值 fp = fopen("/proc/loadavg", "r"); if (fp == NULL) { printf("Error: failed to open /proc/loadavg file.\n"); exit(1); } fscanf(fp, "%lf %lf %lf", &la1, &la5, &la15); fclose(fp); // 将load average值保存到传入的指针变量中 *load_avg_1 = la1; *load_avg_5 = la5; *load_avg_15 = la15; } int main() { double load_avg_1, load_avg_5, load_avg_15; // 获取load average值 get_load_avg(&load_avg_1, &load_avg_5, &load_avg_15); printf("Load average: %.2lf, %.2lf, %.2lf\n", load_avg_1, load_avg_5, load_avg_15); return 0; } ``` 该函数打开/proc/loadavg文件并读取其中的load average值,然后将这些值保存到传入的指针变量中。最后在主函数中输出load average值即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值