
创建SpringBoot Web应用,访问/test/t1会死循环

访问/test/t2会死锁

访问两次/test/t1,一次/test/t2。

此时使用top命令看一下进程

可以看到进程5510占用大量CPU。
此时看看进程5510里面是哪个线程导致这种结果
top -p 5510 -H
可以看到是线程5562和5563占用大量CPU,转化为16进制,方便带回查询堆栈定位。

接下来打印出该进程的堆栈信息
jstack 5510 > info.txt此时进程5510的堆栈信息已经保存在info.txt中,vim查看,然后定位线程15bb和线程15ba的堆栈信息。

可以看到线程运行在17行的位置,看一下代码17行。

可以看到17行确实是死循环的位置。
在上述打印出堆栈信息到info.txt后,在信息的最后可以看到死锁信息

查看代码41行和33行

找到线程死锁位置。