文章目录
平均负载和上下文切换学习笔记:
一、平均负载(Load Average)
-
定义: 单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。
-
错误定义: 不是单位时间内的CPU使用率,而是系统中等待CPU和正在执行的进程数量的平均值。
-
理想状态: 每个CPU上都有一个活跃进程,平均负载数等于CPU数量。
-
过载经验值: 平均负载高于CPU数量的70%时,系统可能过载。
二、相关命令
-
uptime
: 显示系统运行时间和平均负载。uptime
-
top
: 实时显示系统运行状态,包括平均负载。top
-
watch -d uptime
: 动态显示uptime
,高亮显示变化的区域。watch -d uptime
-
stress
: 压测命令,用于测试系统稳定性。stress --cpu 4 --io 2 --vm 1 --vm-bytes 128M --timeout 10s
-
mpstat
: 多核CPU性能分析工具。mpstat -P ALL 1
-
pidstat
: 进程性能分析工具。pidstat -wtu 1
-
vmstat
: 虚拟内存统计工具。vmstat -wt 1 1
三、平均负载与CPU使用率的区别
-
CPU使用率: 单位时间内CPU繁忙情况的统计。
-
平均负载: 反映系统中运行和等待CPU的进程数,与CPU使用率不一定一致。
-
情况区分:
- CPU密集型:平均负载和CPU使用率基本一致。
- IO密集型:平均负载升高,CPU使用率不一定升高。
- 大量进程调度:平均负载和CPU使用率同时升高。
四、上下文切换(Context Switch)
-
定义: 是对任务当前运行状态的暂存和恢复过程。
-
类型:
- 进程上下文切换
- 线程上下文切换
- 中断上下文切换
-
过程:
- 记录当前任务的上下文。
- 找到新任务的上下文并加载。
- 切换到新任务的程序计数器位置,恢复其任务。
-
触发条件:
- 时间片耗尽
- 资源不足
- 进程睡眠
- 高优先级进程
- 硬件中断
-
性能问题: 大量的上下文切换可能引发性能问题,需谨慎处理。
五、减少上下文切换的技术用例
- 数据库连接池: 复用连接减少进程间的上下文切换。
- 合理设置进程、线程数: 避免过多进程导致切换开销。
- 直接内存访问(DMA): 减少CPU参与IO操作。
- 零拷贝技术: 优化数据传输过程,减少拷贝次数。
六、CPU为什么要进行上下文切换
- 多任务调度: 多个进程竞争CPU,保证公平调度和执行。
- 时间片轮转: 采用时间片机制,轮流处理多个进程。
- 硬件中断响应: 中断处理打断正常调度,需要切换到中断上下文。
总体而言,理解平均负载和上下文切换对于系统性能分析和优化是非常重要的。通过合理使用相关命令和技术手段,可以更好地监控系统状态,及时发现和解决性能问题。