[root@test ~]# uptime
15:35:33 up 108 days, 18:16, 1 user, load average: 0.01, 0.04, 0.05
各列代表的含义
15:35:33 //当前时间
up 108 days, 18:16 //系统运行时间
1 user //正在登录用户数
load average: 0.01, 0.04, 0.05 //依次过去1分钟,5分钟,15分钟的平均负载
平均负载是指:单位时间内,系统处于可运行状态和不可中断状态的平均进程数,
也就是平均活跃进程数。
所谓可运行状态的进程,是正在使用CPU或者正在等待使用CPU的进程,也就我们使用ps命令看到的处于R状态(Running或者Runnable)的进程。
所谓不可中断状态的进程,是正处在内核态关键流程中的进程,并且这些流程是不可打断的。比如最常见的是等待硬件设备的I/O响应,也就是使用ps命令看到的D状态(Uninterruptible Sleep,也称为Disk Sleep)的进程。
1.平均负载最理想的情况是等于cpu核数
2.查看系统cpu核数
grep 'model name' /proc/cpuinfo | wc -l
3.使用平均负载的3个值,分析系统负载趋势
平均负载是单位时间内的可运行状态和不可中断状态的进程数。包含正在使用的CPU的进程和等待CPU,等待IO的进程。
CPU使用率是单位时间内繁忙CPU的统计情况。跟平均负载并不一定完全对应。比如
安装:
(1)centos:yum install -y stress sysstat
(2)ubuntu:apt install stress sysstat
介绍:
stress是一个系统压力测试工具,用作异常进程模拟平均负载升高的场景。
sysstat包含常用的Linux性能工具,用来监测和分析系统的性能。主要使用俩个命令
每个场景开4个终端,使用root用户登录到同一台Linux机器,使用uptime命令看一下测试前的平均负载
$ uptime
... load average: 0.00, 0.17, 0.78
场景一:CPU密集型
第一个终端运行stress命令,模拟一个CPU使用率100%的场景
$ stress --cpu 1 --timeout 600
第二个终端运行uptime命令,查看平均负载变化情况
#-d 参数表示高亮显示变化的区域
$ watch -d uptime
..., load average: 1.00, 0.75, 0.39
第三个终端使用mpstat命令,查看CPU使用率的变化情况
#-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
mpstat -P ALL 5
Linux 3.10.0-957.21.3.el7.x86_64 04/21/2020 _x86_64_ (1 CPU)
06:32:20 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
06:32:25 PM all 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:32:25 PM 0 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00
分析:从第二个终端看,1分钟的平均负载满满增加到1,第三个终端看cpu使用率接近100%,iowait确实0%,说明平均负载的升高正式由于CPU使用率100%。到底是哪个进程导致的CPU使用率为100%,
第四个使用pidstat命令查看
#间隔5秒后输出一组数据
pidstat -u 5 1
Linux 3.10.0-957.21.3.el7.x86_64 04/21/2020 _x86_64_ (1 CPU)
06:47:18 PM UID PID %usr %system %guest %CPU CPU Command
06:47:23 PM 0 6195 0.00 0.20 0.00 0.20 0 watch
06:47:23 PM 0 10406 99.20 0.00 0.00 99.20 0 stress
可以明显的看到strees的CPU使用率接近100%。