平均负载的查看: uptime, w, top
此命令的输出结果包括服务器当前时间,运行时间,登录用户及前1分钟,5分钟和15分钟的系统平均负载
平均负载是反映服务器当前状态最直观和简洁的数据.
对于平均负载,man手册是这样解释的:
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210427174443773.png#pic_center)
平均负载是指单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。
简单来说, 平均负载即单位时间的活跃进程数
名词解释
可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即ps aux命令下STAT处于R状态的进程
不可中断状态的进程:处于内核态关键流程中的进程,且不可被打断,如等待硬件设备IO响应,ps命令D状态的进程
判断指标
理想状态:每个cpu上都有一个活跃进程,即平均负载数等于cpu数
过载经验值:一般来说,当平均负载高于cpu数量70%的时候,就应该引起重视了. 一旦负载过高,就可能导致响应变慢,进而影响服务的正常功能.
但70%这个数字并不是绝对的, 建议把平均负载监控起来,记录更多的历史数据, 根据负载的变化趋势来判断数据是否异常.
在现实工作中,我们常常把平均负载和CPU使用率混淆,在这,我们做个区分:
平均负载是指单位时间内,系统中处于可运行状态和不可中断状态的平均进程数,它不仅包含正在使用cpu的进程,还包含等待cpu的进程及等待io的进程;
而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应.例如:
1).CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时两者是一致的;
2).大量等待 CPU 的进程调度也会导致平均负载升高, 此时两者也是一致的;
3).I/O密集型进程,等待 I/O 也会导致平均负载升高, 但此时CPU使用率不一定高.
*
## *实验案例*
*
实验准备:
机器: 2cpu+2G内存
系统: centos7.3
安装stress,sysstat包
[root@node1 ~]# yum install stress-ng sysstat -y
#stress-ng是一个linux压测工具, 我们使用stress来模拟平均负载高的场景
#sysstat包含几个常用的linux性能分析工具:
mpstat - 查看每个CPU性能指标以及所有CPU的平均指标
pidstat - 实时查看CPU, 内存, I/O及上下文切换等指标
实验一: CPU密集型
开启三个终端连接到服务器
1. 先看一下平均负载![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210427174740321.png)
2.执行以下命令:
[root@node1 ~]# stress-ng -c 2 --timeout 600
3.在另一个终端查看平均负载变化情况:
[root@node1 ~]# watch -d -n1 uptime #-d 高亮显示变化的数据
4.在第三个终端使用mpstat工具查看:
[root@node1 ~]# mpstat -P ALL 5 #-P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒输出一组数据
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210427174846362.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FoZ2praGdqaA==,size_16,color_FFFFFF,t_70)
通过第二个终端我们可以看到系统平均负载在不断升高
通过第三个终端我们可以看到两个CPU的的使用率将近100%, 而iowait都为0,说明平均负载的升高正是因为CPU的使用率导致
那到底是哪个进程导致的呢? 可以通过pidstat查看:
[root@node1 ~]# pidstat -u 5 1 # 5秒后输出一组数据
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210427174925814.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FoZ2praGdqaA==,size_16,color_FFFFFF,t_70)
可以明显看到: stress-ng进程的cpu使用率很高导致系统平均负载的升高
实验二: I/O密集型
开启两个终端连接到服务器
1.先看一下平均负载
2.执行一个模拟i/o密集型的操作
[root@node1 ~]# stress-ng -i 1 --hdd 1 --timeout 600 # -i 调用sync()不停刷缓冲区的数据到磁盘 --hdd 读写临时文件
3.使用mpstat查看:
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=2021042717500722.png)
可以看到由于等待IO导致的平均负载的升高
实验三: 大量进程争抢CPU
开启两个终端
1.执行一个命令,模拟8个进程:
[root@host5 ~]# stress-ng -c 8 --timeout 600
由于系统只有 2 个 CPU,明显比 8 个进程要少得多, 因而系统严重过载
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210427175045147.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FoZ2praGdqaA==,size_16,color_FFFFFF,t_70)
可以看到是8个进程在争抢CPU导致平均负载升高
小结:
导致平均负载升高可能是: CPU密集型进程, IO密集型进程, 多进程争用CPU