性能问题分析-线程死锁

现象:

  (1)压测进行一段时间后,程序停顿,报超时错误。但这种现象并不一定就是线程死锁造成的,也可能是数据库/中间件连接池被占满、数据库死锁造成的。

  (2)能够打开页面,但获取不到数据

排查手段:

  (1)使用jstack命令查看Java进程下所有线程的情况:jstack -l 进程号

  (2)如果有Blocked状态的线程,说明有线程死锁的状况。如果大量线程都是Waiting状态,则需要去关注数据库和中间件,可能会有排队情况。

  (3)也可以使用JConsole、JVisualVM及JProfiler等工具直接查看所有线程的情况

分析实战:

一般线程死锁会导致CPU飙高,所以可参考CPU偏高的文章去排查线程死锁(https://www.cnblogs.com/mululu/p/15078329.html)

原文地址:https://www.cnblogs.com/mululu/p/15079477.html