本文链接地址:http://blog.chinaunix.net/uid-31396856-id-5793421.html
在unix/Linux中,我们由很多方法去查看系统负载,比如top、uptime、w、vmstat等。比如:
[root@dbawatcher ~]# uptime
09:43:27 up 164 days, 18:13, 2 users, load average: 5.11, 1.62, 0.57
有四部分信息:系统当前时间,系统运行多长时间,多少登录的用户,以及系统在过去的(1分钟、5分钟、15分钟)的平均负载
09:43:27 //当前时间
up 164 days, 18:13 //系统运行时间
2 users //正在登录的用户数
最后这部分:load average: 5.11, 1.62, 0.57,则依次则是过去 1 分钟、5 分钟、15 分钟的平均负载(Load average),负载信息也记录在文件/proc/loadavg中。
[root@dbawatcher ~]# cat /proc/loadavg
2.02 1.97 1.48 3/163 13223
1、什么是平均负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:
1- 它没有在等待I/O操作的结果
2- 它没有主动进入等待状态(也就是没有调用'wait')
3- 没有被停止(例如:等待终止)
Linux 中,平均负载一般指在内核运行队列中被标记为运行或不可打断状态的平均进程数。也就是平均活跃进程数,即运行加等待线程的平均数,它和 CPU 使用率并没有直接关系。
(1)可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是用ps 命令查看,处于 R 状态(Running 或 Runnable)的进程。
(2)不可中断状态的进程则是正在等待 I/O 的进程。这些进程正在与硬件进行交互,并且交互过程是不允许中断的,也就是 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
2、平均负载和 CPU 核心数的关系.
我们知道,在理想的状况,平均负载等于cpu的核数。所以我们首先要知道系统cpu的情况。可以通过nproc或者lcpu查看系统的cpu信息。或者通过文件/proc/cpuinfo查询,获得系统上每个处理器信息的数字表示方式,具体命令如下:
grep ‘model name’ /proc/cpuinfo | wc -l
多处理器: 一个计算机系统中集成两个或多个物理 CPU。
多核处理器 : 一个物理 CPU 有两个或多个单独的核并行工作(也叫处理单元)。双核意味着有两个处理单元,4 核有 4 个处理单元…n核有n个处理单位。
超线程:intel的超线程技术来提高并行运算能力,在操作系统中,单个物理 CPU 表现的和两个逻辑 CPU 一样(实际在硬件上只有一个 CPU)。
[root@dbawatcher ~]# uptime
10:10:51 up 17 days, 19:28, 3 users, load average: 1.00, 0.60, 2.83
在单核系统中意味着:
CPU 被充分利用(100%);最近的 1 分钟有 1 个进程在运行。在最近的 5 分钟没有进程等待 CPU 时间。CPU 平均过载了 183%;最近的 15 分钟平均有 0.83 个进程在等待 CPU 时间。
在双核系统中意味着:
有一个 CPU 处于完全空闲状态,另一个 CPU 被使用;最近的 1 分钟没有进程等待 CPU 时间。
在最近的 5 分钟没有进程等待 CPU 时间。
CPU 平均过载了 83%;最近的 15 分钟有 0.83个进程等待 CPU 时间。
3、平均负载趋势
根据uptime的得到的1分钟、5分钟、15分钟三个时间段的平均负载进行分析:
如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去的15 分钟内系统有很大的负载。
反过来,如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能系统负载还会持续增加下去,所以就需要警惕。如果一旦 1 分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,这时就得分析是哪里导致出现问题。
4、平均负载和CPU使用率的关系
平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。
如果是CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的。
如果是I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高。
如果有大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
--The end