线上踩坑-CPU飙高排查

702 阅读1分钟

问题:系统cpu突然飙高,联系运维打印线程栈

1.通过日志查询到:

  • com.galaxy.routem.core.rpc.service.RoutemRpcServiceIpml.routelineShifts(com.galaxy.routem.api.vo.ShiftParamsVo) @bci=399, line=282 (Compiled frame)

282行导致死循环

2.修改代码优化上线,解决问题

3.代码中禁止写while(true) 等死循环

排查CPU飙高的方式

方案一:

top -c查看cpu和内存使用率最高的进程pid

\

2.使用top -Hp 1045查看进程中占用cpu最多的线程TID


\

\

3.使用命令printf "%x\n" 1045把线程pid转换成16进制数,得到:415。

\

4.使用jstack 1045 | grep -20 415命令查询该线程阻塞的地方。

\

\

方案二:

使用Arthas分析高CPU问题 阿尔撒斯

curl -O alibaba.github.io/arthas/arth…


java -jar arthas-boot.jar

\

\

输入1 进行监听

\

thread -n 3 查看下最忙的3线程


\

dashboard命令用于整体展示进程所有线程、内存、GC等情况,其输出如下

\

退出:exit

主要原因:

1.代码 中的死循环会导致CPU飙高(一般突然飙高的主要原因)

  1. 大量并发的I/O操作

3.老年代不够导致 频繁GC