02平均负载-Linux性能优化

Posted by 刘勇(lyonger) on 2019-11-30

概念

  • 平均负载是指单位时间内,系统处于可运行状态不可中断状态(等待CPU或者等待I/O)的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系,直观上理解就是单位时间内的活跃进程数,但它实际上是活跃进程数的指数衰减平均值。下面解释一下可运行状态和不可中断状态。

    • 可运行状态的进程,是指正在使用CPU或者正在等待CPU的进程,也就是PS命令中看到的R状态的进程。
    • 不可中断状态的进程则是正处于内核态关键流程中的进程,并且不可被打断,比如等待硬件设备的I/O响应,也就是PS命令中看到的D状态进程。
  • 来一个直观的数据理解,比如平均负载为2时,意味着:

    • 在只有2个CPU的系统上,代表所有的CPU都刚好被完全用完。
    • 在4个CPU的系统上,意味着CPU有50%的空闲。
    • 在只有1个CPU的系统中,意味着有一半的进程竞争不大CPU。

相关工具

  • 下面展示一下排查CPU负载时常用工具:
1
2
3
4
5
6
7
8
9
10
11
12
# 查看哪颗CPU占用高,-P ALL 表示监控所有CPU,后面数字 5 表示间隔 5 秒后输出一组数据
$ mpstat -P ALL 5
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:30:06 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13:30:11 all 50.05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 49.95
13:30:11 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
13:30:11 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

# 查看具体是哪个进程占用CPU高,间隔 5 秒后输出一组数据
$ pidstat -u 5 1
13:37:07 UID PID %usr %system %guest %wait %CPU CPU Command
13:37:12 0 2962 100.00 0.00 0.00 0.00 100.00 1 stress

总结

  • 平均负载只是表现了系统整体的负载情况,但是只看平均负载本身,并不能明确是哪里出现了问题,所以还需要关注以下因素:
    • 平均负载高可能是CPU密集型进程导致。
    • 平均负载高并不一定代表CPU利用率高,可能是I/O比较繁忙。
    • 可以是呀mpstat、pidstat工具进一步分析。

推荐阅读



支付宝打赏 微信打赏

赞赏一下