性能问题分析-线程死锁
现象:
(1)压测进行一段时间后,程序停顿,报超时错误。但这种现象并不一定就是线程死锁造成的,也可能是数据库/中间件连接池被占满、数据库死锁造成的。
(2)能够打开页面,但获取不到数据
排查手段:
(1)使用jstack命令查看Java进程下所有线程的情况:jstack -l 进程号
(2)如果有Blocked状态的线程,说明有线程死锁的状况。如果大量线程都是Waiting状态,则需要去关注数据库和中间件,可能会有排队情况。
(3)也可以使用JConsole、JVisualVM及JProfiler等工具直接查看所有线程的情况
分析实战:
一般线程死锁会导致CPU飙高,所以可参考CPU偏高的文章去排查线程死锁(https://www.cnblogs.com/mululu/p/15078329.html)