平均负载
作者:赵坤
uptime 命令
了解负载情况:
$ uptime
22:39:37 up 2:47, 1 user, load average: 1.44, 1.12, 0.79
含义:
# 当前时间
22:39:37
# 系统运行多久了
up 2:47
# 当前有几个用户登录
1 user
# 过去 1 分钟、5 分钟、15 分钟的平均负载
load average: 1.44, 1.12, 0.79
平均负载的含义
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
- 可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于
R
状态(Running 或 Runnable)的进程。 - 不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的
D
状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
$ ps -efl
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 42420 - 19:51 ? 00:00:11 /sbin/init splash
1 S root 2 0 0 80 0 - 0 - 19:51 ? 00:00:00 [kthreadd]
1 I root 3 2 0 60 -20 - 0 - 19:51 ? 00:00:00 [rcu_gp]
1 I root 4 2 0 60 -20 - 0 - 19:51 ? 00:00:00 [rcu_par_gp]
1 D root 10529 2 0 80 0 - 0 - 21:46 ? 00:00:04 [kworker/u16:1+events_unbound]
4 R zk 15513 14502 0 80 0 - 5029 - 22:48 pts/1 00:00:00 ps -efl
平均负载多少算合理
平均负载最理想的情况是等于 CPU 个数
查看 CPU 个数:
$ grep 'model name' /proc/cpuinfo | wc -l
4
在生产环境中,当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。