Linux系统中的load average

在操作系统中我们查看系统的负载一般会使用cpu使用率和load average两个值判断,load就是当前正在使用cpu的进程和正在等待使用cpu的进程数量之和。简单来讲就是Load对当前CPU工作量的度量,即进程队列的长度。

Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 Load 。

1、可以通过系统命令"w"来查看当前load average的情况

其对应的三个值分别表示:

第一位:表示最近1分钟平均负载

第二位:表示最近5分钟平均负载

第三位:表示最近15分钟平均负载

:linux系统是5秒钟进行一次Load采样

2、可以通过系统命令:"top"、"uptime"、"w"命令输出系统1分钟、5分钟、15分钟的load值,load的来源是系统文件/proc/loadavg

[root@jie ~]# cat /proc/loadavg 
0.02 0.06 0.08 1/1454 12386

文件中一共有五个值,依次是:1分钟平均load、5分钟平均load、15分钟平均load、CPU队列中的任务数/总任务数、最后一次运行的进程或线程id。

 

load average值的含义

1)单核处理器

假设我们的系统是单CPU单内核的,把它比喻成是一条单向马路,把CPU任务比作汽车。当车不多的时候,load <1;当车占满整个马路的时候 load=1;当马路都站满了,而且马路外还堆满了汽车的时候,load>1

2) 多核处理器

我们经常会发现服务器Load > 1但是运行仍然不错,那是因为服务器是多核处理器(Multi-core)。
假设我们服务器CPU是2核,那么将意味我们拥有2条马路,我们的Load = 2时,所有马路都跑满车辆。

:查看cpu 核数命令:

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

  

什么是系统负载呢?

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:

  • 它没有在等待I/O操作的结果
  • 它没有主动进入等待状态(也就是没有调用'wait')
  • 没有被停止(例如:等待终止)

一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢。

在操作系统中,一个CPU对应一个task队列。这些数值其实就代表了 task队列中状态为 就绪和进行中的进程个数,这个队列是单行道,加入是一个cpu的话,数值为1表示刚刚好可以处理,如果大于1,表示task队列里面可能有进程在堆积了,也就是机器处理不过来了,便是负载过重。

 

正确使用load

不能单纯以load值来判断cpu的负载,要结合cpu的使用率、进程的状态和load值来综合判断。

load飙高一般有三种情况:

1)cpu使用率高,load值高,有状态为R的进程

此时,说明任务都是cpu密集型的,都在等待着cpu,这种情况下说明cpu负载很高。

2).cpu使用率不高,load值高,有状态为D的进程

这种情况会发现进程状态为D,说明任务为IO密集型的任务,都在等待IO,这种情况下要检查io设备。

3)cpu使用率高,load值高,系统中既有R状态又有D状态的进程。

存在D状态的任务,说明IO操作出现了阻塞,要关注IO设备情况;CPU负载需要排查了D状态进程问题后再去判断。

 

D状态的进程

睡眠状态的进程有两种,一种是S状态的进程,又叫interruptible sleep进程;一种是D状态的进程又叫uninterruptible sleep进程;

从名字上就可以看出他们的区别,可中断休眠进程与不可中断休眠进程,处于S状态的进程是可以响应中断状态的,我们通过Kill -信号 方式可以给进程发送中断命令,进程可以响应命令,而处于D状态的进程是个聋子,它不会响应你的任何命令,即使是root用户使用kill -9 也不行,要结束掉这种状态的进程,只能等待io操作执行完成,如果io设备出现了问题,那么就只能重启服务器了,所以即使是root用户也有无可奈何的时候啊。

 

posted @ 2019-03-01 10:33  让我们荡起双桨!  阅读(308)  评论(0)    收藏  举报