1.cpu load又被称为cpu负载
具体定义为在特定时间间隔内cpu运行队列中的平均进程数,这里进程包括正在运行和准备好运行的进程。
对于单核处理器来说,负为<=1.00,表示目前的进程数量在处理器的承受范围内,即所有进程都不需要等待,处理器可以很快的进行处理,如果超过1.00就说明队列中有线程处于等待状态,值越大代表等待的进程越多
对于多核处理器,负载值超过对应的核数才代表负载过高
2.load过高原因
频繁full GC可能会造成cpu负载过高
死循环也可以造成cpu负载过高
3.使用工具
(1)在负载过高时,使用top -c按cpu占用量显示进程,按大写的P按cpu占有资源排列
(2)top -Hp pid显示一个pid的线程运行信息列表,按大写的P按cpu占有资源排列
(3)可以使用printf “%x” 线程Id,将线程Id转为16进制
(4)vmstat命令,显示正在排队和IO的进程情况,其中表示运行队列中的进程数,b表示等待IO的进程数量
4.load和cpu使用率
上图中97.1%id代表cpu的空闲状态,在top命令下,按数字1查看所有cpu的使用率情况
cpu使用率是指:在分给某个进程时间片时,这个进程是否使用了cpu的计算能力。
cpu load高和占用率高不一定是同时发生的状况,以下举例说明
(1)多个进程绑定到同一个核然后导致Load过高,但cpu总的占用率不高,查看每个cpu占用率时会发现,单个cpu的占用率高
(2)进程在获得cpu使用权时,进程大部分时间处于僵死,睡眠,等待IO的情况下,cpu的使用率就会很低,但load不一定高
(3)当进程需要大量计算,任务执行时间长的时候,cpu使用率会上升,但load不一定高
(4)频繁的上下文切换耗费了大量的CPU时间,导致真正用在运算的CPU时间片比较少(低CPU使用率),却有很多进程在等待运行(高Load)