目的:

  • 利用实例理解LoadAverage这一指标代表的含义
  • 当load升高时,能够快速分析定位到问题原因

image.png

LoadAverage

是单位时间内的CPU使用率吗?
平均负载指单位时间内,系统处于可运行状态不可中断状态的的平均进程数

可运行&不可中断

可运行

正在使用CPU或者正在等待CPU的进程,也就是我们使用ps命令可以看到的,处在R状态的进程

不可中断

处在内核态关键流程中的进程。也就是在ps中看到的处在D状态的进程。比如I/O等待,进程向磁盘写数据,为了保证数据一致性,在磁盘回复前,不能被其他进程或者中断打断。其实是系统对进程和硬件设备的一种保护机制

理解

LoadAverage其实是活跃进程数的指数衰减平均值,我们可以将其简单的理解为活跃进程数的平均值。
假设当前平均负载为2

  • 在双核系统上,就意味着CPU刚好被完全占用
  • 在单核系统上,意味着有一半的进程竞争不到CPU

    合理区间值

    70%
    通过命令 grep 'model name' /proc/cpuinfo | wc -l
    或者htop数框框

    SMT(同步多线程)技术能使一个CPU同时执行两个线程,从操作系统调度的角度来看,我们可以将一个四核八线程的处理器视作有八个CPU。

性能问题分析工具

iostat、mpstat、pidstat、htop、ctop

平均负载和CPU使用率

平均负载 = 正在使用CPU + 等待CPU + 等待IO + 进程调度
CPU使用率 = 单位时间内CPU繁忙情况的统计
举例:

  • CPU密集进程,大量CPU的使用导致平均负载升高,两者数据相对一致
  • IO密集进程,等待IO导致平均负载升高,CPU使用率不一定高

    案例

  • stress:系统压力测试工具,模拟平均负载升高

  • sysstat:包含了常用的性能工具,用来监控和分析系统性能
    • mpstat:CPU性能分析工具,
    • pidstat:进程性能分析工具

CPU密集模拟

模拟

设置负载

  1. # 设置四个核心满负载
  2. stress --cpu 4 --timeout 600

查看负载变化情况

  1. htop

查看CPU使用率变化

  1. # 监控所有CPU,5秒输出一次
  2. mpstat -P ALL 5

哪个进程导致的CPU使用率升高?

  1. pidstat -u 5 1

结论

可以看到4个核心满载,使用率是100%,但是iowait很低,说明这一次平均负载升高就是由于CPU的使用率太高。

IO密集模拟

模拟

设置负载

  1. # 不停的执行sync
  2. stress -i 1 --timeout 600

查看负载变化

  1. htop

查看CPU使用率

  1. mpstat -P ALL 5 1

进程占用

  1. pidatat -u 5 1

结论

IO等待导致load升高

大量进程调度模拟

模拟

  1. stress -c 20 --timeout 600

查看负载变化

  1. htop

查看CPU使用率

  1. mpstat -P ALL 5 1

进程占用

  1. pidsatat -u 5 1

结论

大量的调度导致load升高

总结

  1. 它不是CPU使用率
  2. 平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。
  3. 平均负载本身并不能直观的展示性能的瓶颈在哪里。所以在平均负载升高要定位问题的时候,需要合理使用工具,从CPU和IO以及任务调度的角度去分析和定位问题

参考


小调研

内存

  • swap
  • buffer
  • cache

    网络


  • 基础
  • 常见网络故障排查
  • 路由表