1、背景说明
针对项目中经常遇到的CPU占用告警问题问题排查的思路整理及相关工具的介绍。
2、问题说明
常见的CPU高占用问题,
3、问题分析
3.1 定位资源占用进程
根据上图展示的阿里云ECS服务器监控情况来看,整个服务器运行压力比较大,内存使用率和系统负载都很高。
需要使用Top命令确定是那些服务占用了系统的资源,经排查发现是Smartbi的Tomcat进程占用资源最多,
下面需要对Smartbi的Tomcat进程做进一步分析。
3.2 Smartbi的Tomcat进程
3.2.1 方式1 通过top查看CPU消耗
命令:top -H -p pid
其中pid为Tomcat进程号,比如上图的20334
可以查看到很多线程占用CPU比较高,如果需要查看线程具体执行的代码逻辑需要通过如下操作
3.2.2 方式2 通过listthread.jsp查看CPU消耗
如果此时Smartbi页面可以正常访问,可以使用Smartbi内置的JSP页面来查看哪些线程占用CPU比较多。
访问地址举例:http://proj.smartbi.com.cn:30001/smartbi/vision/monitor/listthreads.jsp
加载此界面完成后Ctrl+S保存网页内容发回分析,可分析是哪个线程占用过高的CPU:
3.2.3 方式3 通过arthas工具查看CPU消耗
通过arthas工具监控发现Smartbi存在大量线程CPU使用率非常高。
3.2试试
经排查这些线程主要是对tx_processdag表进行全表遍历,tx_processdag大约有2.5万条记录,单独执行需要20s+才能够执行完毕,存在很大性能瓶颈。
4、项目案例
4.1 ETL导致的CPU占用告警
某项目反馈CPU使用率突然飙升,经排查发现是因为ETL执行引擎占用了较高的CPU
检查ETL配置发现执行引擎中配置了14核(一共16核)导致的问题,这个是ETL本身机制问题导致的。
注意:ETL运行原理是基于分配的CPU进行使用,如果job比较多且数据量大就会把所分配的CPU全部占用
ETL建议的CPU和内存比例为1:4 ,目前内存是32g,建议配置8核CPU。