1. 关于jstack的说明
jstack prints Java stack traces of Java threads for a given Java process or core file or a remote debug server.
jstack用于打印一个JAVA进程里面的线程堆栈,是我们排查性能瓶颈时常用的工具。
2. 准备知识
2.1 Java Thread的状态
一般操作系统中线程的生命周期是这样的:
对应到JAVA中的线程状态则变成了如下图所示。控制流箭头标注了触发状态改变的action。
可以看到这里我没有写RUNNING的状态。其实JAVA中Thread类的定义中也确实没有RUNNING的状态。这不代表线程没有RUNNING状态,只不过在JAVA语言中,没必要特地定义RUNNING状态,只要处于RUNNABLE,后面运行的事情就是OS来管理了。OS会负责将RUNNABLE的JAVA线程进行调度,过程中也可能经历Suspend等状态。