概念
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数, 也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
可执行状态的进程是指正在使用cpu和正在等待使用cpu的进程。(ps后看见的R[Runable/Running]状态的进程)
不可中断状态的进程是指处于内核态关键的流程中的进程。比如等待IO响应(ps 看见的D[Disk Sleep]状态的进程)
比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不 能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打 断了,就容易出现磁盘数据与进程数据不一致的问题。
可以理解不可中断状态是对进程和设备的保护机制
平均负载合理范围
平均负载最理想的是等于cpu个数
grep 'processor' /proc/cpuinfo |wc -l
如果平均负载大于cpu的数目的时候是过载,一般说法是高于cpu个数的70%就要排查原因。
看负载的时候需要结合三个数字看,看目前的趋势是在降低还是持续升高。
什么类型的任务会导致高负载
我归结成主要是三类原因:CPU密集型进程、IO密集型进程、进程数过多导致的。
怎么确定是哪种原因导致的?
1、先确定是不是cpu密集型的进程
mpstat查看cpu使用率,如果是这样的情况,显示使用率满,可以确定是cpu密集型的进程
用pidstat 来查看究竟是哪个进程导致的
如果需要找到他文件打开文件,可以用lsof -p 2840或者 用-c stress 看进程的文件使用情况
2、如果不是的话,还是用mpstat看iowait那一列是不是比较高然后导致cpu使用率提高了,如果是的话,同样用pidstat看是哪个程序导致的。(方法是差不多的)
3、进程过多的情况,可以直接使用pidstat看进程情况
像这样,好几个进程在抢cpu,导致负载过高。
总结
平均负载概念:
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数, 也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
平均负载高的原因:
1、有可能是 CPU 密集型进程导致的;
2、平均负载高并不代表 CPU 使用率高,还有可能是 I/O 繁忙了;
排查方案:
当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源。