...
针对项目中经常遇到的CPU占用告警问题问题排查的思路整理及相关工具的介绍。
2、问题说明
常见的CPU高占用问题,常见的CPU高占用问题,分为瞬时占用高和持续占用高2种情况???????
3、问题分析
3.1
...
第一步:定位占用CPU高的进程
根据上图展示的阿里云ECS服务器监控情况来看,整个服务器运行压力比较大,内存使用率和系统负载都很高。使用Top命令确定是哪个进程占用了系统的大部分CPU,比较常见的是Smartbi的Tomcat进程占用资源最多的情况。
需要使用Top命令确定是那些服务占用了系统的资源,经排查发现是Smartbi的Tomcat进程占用资源最多,
下面需要对Smartbi的Tomcat进程做进一步分析。确定了是哪个进程占用了CPU后就需要分析是进程的哪一个线程占用了CPU。
3.2
...
第二步:定位消耗CPU高的代码逻辑
3.2.1
...
方法1 通过top查看CPU消耗
...
命令:top -H -p pid
其中pid为Tomcat进程号,比如上图的20334
可以查看到很多线程占用CPU比较高,如果需要查看线程具体执行的代码逻辑需要通过如下操作
...
方法说明:
优势:不依赖任何外部工具,且在Smartbi无法页面访问时也能使用。
劣势:手动打命令转化慢,可能线程瞬间就运行完毕了,则无法捕捉到。
3.2.1.1 定位高占用线程
命令:top -Hbp pid | awk '/java/ && $9>50'
注:其中pid为Tomcat进程号
3.2.1.2 将高占用进程的线程号转换成16进制
命令:printf "%x\n" tid
注:其中tid为Tomcat线程号
3.2.1.3 jstack查看进程信息-定位到代码
命令:jstack pid | grep "xxx" -A 30
注:其中pid为Tomcat进程号,"xxx"为线程号的16进制码
3.2.2
...
方法2 通过listthread.jsp查看CPU消耗
如果此时Smartbi页面可以正常访问,可以使用Smartbi内置的JSP页面来查看哪些线程占用CPU比较多。方法说明:
优势:操作简单方便快捷。
劣势:必须Smartbi能访问时也能使用。
访问地址举例:http://proj.smartbi.com.cn:30001/smartbi/vision/monitor/listthreads.jsp
加载此界面完成后Ctrl+S保存网页内容发回分析,可分析是哪个线程占用过高的CPU:S保存网页内容发回分析,可分析是哪个线程占用过高的CPU,线程的堆栈也可以看到。
3.2.3
...
通过arthas工具监控发现Smartbi存在大量线程CPU使用率非常高。
3.2试试
...
方法3 通过基线Tomcat内置工具
优势:操作简单方便快捷,且在Smartbi无法页面访问时也能使用。
劣势:需要运行shell脚本,有些安全要求高的项目可能会被禁止。
命令:./1_show-busy-java-threads.sh
4、项目案例
4.1 ETL导致的CPU占用告警
...