每次发现系统变慢时,我们通常做的第一件事就是使用 uptime
或 top
命令查看系统的 “平均负载”
[root@rocketmq-n2 ~]# uptime
11:33:53 up 2:18, 2 users, load average: 0.01, 0.04, 0.05
[root@rocketmq-n2 ~]# top
top - 11:34:25 up 2:19, 2 users, load average: 0.01, 0.03, 0.05
Tasks: 157 total, 1 running, 156 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.8 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0
KiB Mem : 7992344 total, 2596676 free, 4999988 used, 395680 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 2693324 avail Mem
load average: 0.01, 0.04, 0.05
显示系统 1、5、15分钟的平均负载,即1、5、15分钟内平均活跃进程数为0.01个、0.04个, 0.05个
1、概念
(1)、平均负载
平均负载就是指单位时间内,处于 “可运行状态” 和 “不可中断状态” 的平均进程数,也就是平均活跃进程数,它和 CPU使用率没有直接的关系。
(2)、“可运行状态” 的进程
“可运行状态” 的进程是指在使用 CPU(Running ) 或者正在等待 CPU(Runnable) 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
[root@rocketmq-n2 ~]# ps a
PID TTY STAT TIME COMMAND
755 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux
1417 pts/0 Ss 0:00 -bashjps
4449 pts/0 R+ 0:00 ps a
(3)、“不可中断状态”的进程
正处于内核态关键流程中的进程,并且这些流程是不可打断的。
比如最常见的是等待硬件设备的 I/O 响应的进程,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
可运行状态的进程不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和部分等待 I/O 的进程。
(4)、平均负载与CPU 使用率的关系:
单位时间内 CPU 繁忙情况的统计,跟平均负载并不完全对应。
CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时两者是一致的
I/O 密集型进程,等待 I/O 会导致平均负载升高,但CPU使用率不一定高
2、动手实验
(1)、安装相关软件
yum install -y epel-release # 第一步
yum install -y stress # Linux 系统压力测试工具
yum install sysstat # Linux性能工具,用来监控和分析系统的性能
(2)、测试
sar -u 1 5
pidstat -u 5 1
stress --cpu 1 --timeout 600 # 模拟CPU密集型进程,使用率100%
stress -i 1 --timeout 600 # 模拟I/O 密集型
stress -c 8 --timeout 600 # 模拟8个进程
mpstat -P ALL 5 1 # sysstat的命令,显示所有CPU的指标,每5秒输出一组数据
pidstat -u 5 1 # sysstat的命令,每5秒输出一组数据,-u 表示 CPU 指标
参考:Linux平均负载理解