什么是平均负载?

  • 平均负载指得是单位时间内,系统处于可运行状态不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率没有直接关系
    • 可运行的状态进程: 指得是正在使用的CPU或正在等待的CPU进程
    • 不可中断状态的进程: 指得是正处于内核态关键流程中的进程
  • 那么,平均负载其实就是平均活跃进程数——单位时间内活跃的进程数

假设当平均负载为2时:系统有2个CPU,意味着所有CPU都刚好被占用;当系统有4个CPU,意味着CPU 50%为空闲

查看系统负载情况

1.uptime

当平均负载高于CPU个数70%(不固定),就应该排除负载高问题

1
2
$ uptime
14:22  up 1 day,  4:17, 2 users, load averages: 1.92 1.74 1.61
  1. 14:22 //当前时间
  2. up 1 day, 4:17 //系统运行时间
  3. 2 users //正在登录用户
  4. load averages: 1.92 1.74 1.61//过去1min,5min,15min的平均负载

2.平均负载与CPU使用率

  • 平均负载是指单位时间内,处于可运行状态和不可 中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待CPU等待I/O的进程
  • CPU使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。

3.测试工具

  1. stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场 景。
  2. sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用 到这个包的两个命令 mpstat 和 pidstat。
    • mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标, 以及所有 CPU 的平均指标。
    • pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及 上下文切换等性能指标。

4.场景分析

场景1:CPU密集型进程

1
2
3
4
5
6
#用stress模拟一个CPU使用率100%场景
$ strss --cpu 1 --timeout 600
#uptime查看平均负载情况
$ watch -d uptime
#用mpstat查看CPU使用率变化,间隔5秒后输出一组数据
$ mpstat -P ALL 5 1

场景2:I/O密集型进程

1
2
3
4
5
6
#用stress模拟,I/O压力
$ strss -i 1 --timeout 600
#uptime查看平均负载情况
$ watch -d uptime
#用mpstat查看CPU使用率变化,间隔5秒后输出一组数据
$ mpstat -P ALL 5 1

场景3:大量进程的场景

1
2
3
4
5
6
#用stress模拟8个进程(本机是4个cpu)
$ strss -c 8 --timeout 600
#uptime查看平均负载情况
$ watch -d uptime
#用mpstat查看CPU使用率变化,间隔5秒后输出一组数据
$ mpstat -P ALL 5 1