0%

Linux性能优化笔记--理解平均负载

知识点

  • 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系;
  • 可运行状态的进程是指正在使用CPU和正在等待CPU的进程,即使用PS命令看到的R状态的进程;
  • 不可中断状态的进程是指正在处于内核态关键流程中的进程,并且这些流程是不可打断的,比如正在等待IO响应,即使用PS命令看到的D状态的进程;不可中断状态是系统对进程和硬件的一种保护机制;

  • 最理想的状态下,一个CPU一个进程,即平均负载等于CPU的个数;

  • 例子说明:假如平均负载为2,意味着什么?

    如果有2个CPU,则意味着所有CPU刚好都被占用;
    如果有4个CPU,则意味着有一半的CPU处于空闲状态;
    如果有1个CPU,则意味着有一半的进程处于挂起状态;

  • 查看CPU信息:cat /proc/cpuinfo 或者 lscpu;

  • 当平均负载高于CPU数量70%的时候,可以认为已经是负载过高了;

  • 最好的方法是把机器负载实时监控起来,根据负载趋势图观察当前负载是否属于过高;

  • CPU使用率是单位时间内CPU繁忙情况的统计;

  • 平均负载和CPU使用率对比说明:

    CPU密集型进程,使用大量CPU导致负载升高,此时两者一致;
    IO密集型进程,等待IO也会导致平均负载升高,但CPU使用率不一定高;
    大量等待CPU的进程调度也会导致平均负载升高,此时两者也是一致的;

相关工具

  • stress - Linux下的系统压力测试工具,可以模拟CPU、磁盘IO、内存等压力,非常有用;
  • mpstat - 多核CPU性能分析工具,查看每个CPU的性能指标及所有CPU的平均指标;
  • pidstat - 进程性能分析工具,查看每个进程的CPU、内存、IO及上下文切换等性能指标;

场景模拟

  • 模拟CPU使用率100%

    • 使用stress工具$ stress --cpu 1 --timeout 600
    • 观察平均负载的变化$ watch -d uptime
    • 查看CPU使用率的变化$ mpstat -P ALL 5
    • 定位CPU使用率高的进程$ pidstat -u 5 1
  • 模拟高IO压力

    • 使用stress工具$ stress -i 1 --timeout 600
    • 观察平均负载的变化$ watch -d uptime
    • 查看CPU使用率的变化$ mpstat -P ALL 5 1
    • 定位CPU使用率高的进程$ pidstat -u 5 1
  • 模拟大量进程

    • 使用stress工具 $ stress -c 8 --timeout 600
    • 观察平均负载 $ uptime
    • 查看进程情况 $ mpstat -P ALL 5 1

总结

根据平均负载可以快速判断一个系统的整体性能,需要进一步定位是什么原因导致的平均负载高的问题。可能是CPU密集型进程导致的,也可能是IO繁忙导致的,具体是那种可以使用mpstat或者pidstat等工具查看。

如果对您有帮助