jstack如何区分JVM级别线程和用户级别线程?

软件工程师、主攻高级编程语言虚拟机的设计与实现

8 👍 / 1 💬

问题描述

jstack -l出来的结果很多,如何区分JVM级别线程和用户级别线程?如何定位程序存在问题?简单的会点,比如死锁啥的,可是一直觉得似懂非懂。求高人详细谈谈~不甚感激!

jstack -l

在Oracle/Sun JDK / OpenJDK上的话,jstack -l只会为Java线程打印stack trace,而JVM的内部线程是不会有stack trace打印出来的(例如VMThread、CompilerThread、GCTaskThread,这些只会打印出个名字,但不会有stack trace)。

Java线程之中,有少量线程是为JVM内部功能提供服务的,例如Finalizer Thread、Surrogate Locker Thread、Signal Dispatcher等。这些应该挺好辨认的。剩下的都是楼主想要的“用户级线程”了。

至于“如何定位程序存在问题”,那确实得具体问题具体分析…