uptime
每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统 的负载情况
|
|
每列含义
22:33
当前时间up 1 day,12:20
系统运行时间4 users
正在登录用户数load averages: 1.92 2.56 3.43
是过去 1 分钟、5 分钟、15 分钟的平均负载
平均负载
平均负载是指单位时间内,系统处于可运行状态
(CPU
正在处理)和不可中断状态
(等待CPU
处理)的平均进程数,也就是平均活跃进程数,它和 CPU
使用率并没有直接关系。
既然平均的是活跃进程数,那么最理想的,就是每个 CPU
上都刚好运行着一个进程,这样每个
CPU
都得到了充分利用.
例如: 当平均负载为 2时
- 在只有 2 个
CPU
的系统上,意味着所有的CPU
都刚好被完全占用。 - 在 4 个
CPU
的系统上,意味着CPU
有 50% 的空闲 - 而在只有 1 个
CPU
的系统中,则意味着有一半的进程竞争不到CPU
。
负载为多少是合理的
- 获取当前
CPU
个数$ grep 'model name' /proc/cpuinfo | wc -l
- 当平均负载比
CPU
个数还大的时候,系统已经出现了过载。
观察1分钟,5分钟,15分钟的情况
- 如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
- 但如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15分钟内却有很大的负载。
- 如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦 1 分钟的平均负载接近或超过了
CPU
的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了
经验
当平均负载高于 CPU
数量 70%
的时候,就应该分析排查负载高的问题了. 一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。
平均负载和CPU使用率
平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU
的进程,还包括等待 CPU
和等待 I/O
的进程。
CPU
密集型进程,使用大量CPU
会导致平均负载升高,此时这两者是一致的。I/O
密集型进程,等待I/O
也会导致平均负载升高,但CPU
使用率不一定很高。- 大量等待
CPU
的进程调度也会导致平均负载升高,此时的CPU
使用率也会比较高。
总结
平均负载反映了整体的负载情况
平均负载高有可能是 CPU
密集型进程导致的
平均负载高并不一定代表 CPU
使用率高,还有可能是 I/O
更繁忙了