Canal实时同步死锁导致CPU飙升
(1)top查看CPU占用情况,可以看到PID为17314的进程CPU占比为502。把CPU都吃完了,前端页面一直很卡
(2)定位具体线程:top -H -p PID 看下该进程下线程的情况,可见5201这几个吃了CPU
也可以:ps -mp 17314 -o THREAD,tid定位具体线程。下边拿5200或者5201线程来分析
(3)拿5201线程ps一下:ps -efL | grep 线程ID,定位到是canal的问题
(4)printf "%x\n" 线程ID: 将需要的线程ID转换为16进制格式
(5)jstack PID| grep 十六进制线程ID -A60: 打印进程ID的Java堆栈信息(A60 就是过滤到关键词之后(A:after)60行信息,不够可以自己再加)
打印的堆栈信息报死锁异常。上边又是报canal的进程吃的CPU,推断是不同环境Canal的任务之间导致死锁。我这里是停掉A服务的一些任务,B服务就正常了,因为B服务有些任务时从A导过来的。具体CPU吃紧情况,可以按照这个思路分析的,当然也可以使用一些堆栈跟踪工具。