早上醒来已经收到多条服务器告警信息,具体是这样的,如下图:Processor load (15 min average per core)
;服务器CPU load 过高,接下来是处理过程,记录一下。
登录告警的服务器,这是一台openshift容器平台的计算机节点;
top查看到 load average 达到了100左右;
最高的进程占用400%
查看一下 这台服务器有56个逻辑c, load average达到56就算是满载了;
因为这是一台容器计算节点,需要找到是那个容器cpu高,继续查看
使用docker stats
命令查看 k8s node节点上所有容器的CPU使用率:
如下图可见,是一个ID为8c1d2b913d93 的容器CPU使用率最高;
进入容器中查看CPU使用情况
docker exec -it 8c1d2b913d93 bash
继续top
查看,就是这个java进程。
进来容器后,从主机名就可以判断是哪个项目的容器–“bigdata”
得到这些信息就够了,通知对应的项目组,让他们检查代码,他们选择关掉进程,CPU 使用率降下来了,load average也降下来了。这个问题算是解决了。
问题分析一波:
现象:
容器的cpu使用率达到400%,宿主机的load average 飙升到100;
疑问:
容器在创建的时候,限制使用4个CPU,现在最高使用率达到400%也是正常的,但为什么容器所在的宿主机 load average也在飙升,这样限制CPU还有什么意义吗?
分析:
load average指的是系统平均负载,具体指 在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。
比如 load average 89 89 90 ,其中的“90”表示:
15分钟内在CPU上运行
+等待运行
的进程平均数.
进一步分析:
top所看到的CPU使用率是cpu正在处理当前进程任务所占用cpu比率;
load average 显示的数值是 cpu正在处理的进程数和等待处理的进程数
因为需处理的进程过多,容器被限制了cpu最多使用4个,导致等待处理进程堵塞,load average是 运行
+等待运行
的进程数,故load average 数值飙升。
所以,在创建容器时,需根据业务量规划好cpu资源使用。