代码改变世界

线程堆栈

2017-06-20 12:01  joe_tester  阅读(377)  评论(0)    收藏  举报

什么是线程堆栈?
  JAVA线程调用堆栈是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况等信息。

  每种JAVA虚拟机都提供了线程转储(thread dump)的后门,通过这个后门可以将那个时刻的线程堆栈打印出来,信息包含:

  1、线程的名字,ID,线程的数量。

  2、线程的运行状态,锁的状态(锁被哪个线程持有,哪个线程在等待锁)

  3、调用堆栈(即函数的调用层次关系)。调用堆栈包含完整的类名,所执行的方法,源代码的行数。

  线程堆栈善于分析:1)系统无缘无故CPU过高。2)系统挂起,无响应。3)系统运行越来越慢。4)性能瓶颈(如无法充分利用CPU)。

           5)线程死锁,死循环,饿死等。6)由于线程数量太多导致系统失败(如无法创建线程等)

如何输出线程堆栈?

  kill  -3  <java pid>  ( java进程id )

如何解读线程堆栈?

  1)只关心java用户线程即可

  2)线程堆栈里最直观的信息就是当前线程的上下文调用,即从哪个函数中调用到哪个函数中(从下往上看),正执行到哪个类的哪一行