1、什么是负载值?
负载值表示CPU处理任务的速率比,过高导致需要任务等待。造成任务延迟执行
例如:一部电梯能站10个人,那当1-10人坐电梯时,可以认为电梯的load
正好10人时,load=1;
超过10人时,load>1;
如果有15个人要坐电梯,那就是说能有10人直接坐电梯,另外5人需要等待。
此时电梯的load=15/10 = 1.5也就是说,1.5的负载表示系统当前满负荷运转,
且还有相当于50%满负荷的请求在等待。
2、怎么查看负载值、负载临界值判断?
terminal 控制台执行 top 指令显示Load Avg: 2.01, 2.28, 2.26
命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。
对于load average的临界值,业内有两种判断依据 load average <= cpu核数 * 0.7
或 load average <= cpu核数 - 1。
cpu核数
命令:sysctl machdep.cpu
sysctl machdep.cpu
machdep.cpu.tsc_ccc.denominator: 2
machdep.cpu.tsc_ccc.numerator: 242
machdep.cpu.thread_count: 4
machdep.cpu.core_count: 2
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
3、负载分类
负载就是cpu在一段时间内cpu使用队列的长度统计信息。
负载分为两大部分:CPU负载、IO负载
cpu负载:假设有一个进行大规模科学计算的程序,虽然该程序不会频繁地从磁盘输入输出,但是处理完成需要相当长的时间。因为该程序主要被用来做计算、逻辑判断等处理,所以程序的处理速度主要依赖于cpu的计算速度。此类cpu负载的程序称为“计算密集型程序”。
IO负载:还有一类程序,主要从磁盘保存的大量数据中搜索找出任意文件。这个搜索程序的处理速度并不依赖于cpu,而是依赖于磁盘的读取速度,也就是输入输出(input/output,I/O).磁盘越快,检索花费的时间就越短。此类I/O负载的程序,称为“I/O密集型程序”。
4、造成负载升高原因?
1、从编程语言层次上full gc次数的增大或死循环都有可能造成cpuload 增高。
2、磁盘读写请求过多就会导致大量I/O等待
3、MySQL中存在没有索引的语句或存在死锁等情况
4、外接硬盘故障,常见有挂了NFS,但是NFS server故障
参考:<span role="heading" aria-level="2">什么是系统平均负载(Load average) - 全栈程序员必看