怎么看平均负载
> uptime
23:15:17 up 5 days, 12:16, 1 user, load average: 0.25, 0.49, 0.58
0.25、0.49、0.58分别是最近1、5、15分钟的平均负载
平均负载是什么
以单核系统举一个例子
- 1.0:系统中有两个进程,分别为CPU密集型和IO密集型,两个进程交替运行。单位时间的活跃进程数就是1,与核心数相同,系统满负荷运行。
- <1.0:系统仍有余力,活跃进程数小于核心数。
- >1.0:系统满负荷运行,同时有一部分进程正在等待核心。
再看看多核
多核和单核不同的只是核心数,所以同等情况下,4核系统对应的平均负载应该是单核系统的1/4。同时,4核系统在满负荷运行时,平均负载就应该是4。
grep 'model name' /proc/cpuinfo | wc -l
这个命令可以看CPU核心数。
来个定义
平均负载:单位时间内处于可运行状态和不可中断状态的平均进程数,即处于活跃状态的平均进程数。
- 可运行状态:进程处于Runnable或Running状态。
- 不可中断状态:
- 阻塞的IO操作
- 执行一些需要在内核空间运行的操作时可能进入不可中断状态
- 调用系统调用并等待其完成
- 在同步互斥操作时,以防止竞争条件
平均负载指标一般怎么用
以单核为前提讨论
理论上,系统负载为1是最合适的,但确实只是理论上。
实际上:
if load<0.7{
//说明系统负载很正常,无需关心
}else load<=1{
//需要开始注意,如果只是暂时的波动,那问题不大。如果持续保持在这个水平,就需要进行解决,防止情况恶化
}else load<5{
//如果持续保持在这个水平,通常已经出现问题了,但应该还有挽回的余地
}else{
//大概率寄了
}
相关工具
平均负载确实比CPU使用率这些要考虑得全面一些,但也有个缺点就是你不能直接定位到是哪个问题。可能是CPU过高,可能是IO过高,也有可能是内存使用过高造成频繁的页面换入换出,这也会导致前两个问题。
所以具体定位细节还需要这些工具:mpstat、pidstat
- mpstat可以看到系统中多核的具体信息,如cpu、io等信息
示例:mpstat -P ALL 3 2
查看所有核心,3s进行一次快照,统计两次 - pidstat可以看到具体进程的信息,以进程为单位进行信息的显示
示例:pidstat -ru 3 2
查看进程信息,3s进行一次快照,统计2次,因为是一段时间的快照,所以只会显示一部分进程。如果想看全量进程,可以不显示进行快照,如pidstat -ru