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用户也有无可奈何的时候啊。
浙公网安备 33010602011771号