java jstack 分析,jstack分析线程的技巧

本文介绍了如何使用jstack工具分析Java进程中的线程堆栈,详细阐述了Java线程的不同状态,包括RUNNABLE、WAITING、TIMED_WAITING和BLOCKED,并通过示例代码展示了线程状态转换的情况,帮助开发者理解和排查性能问题。
摘要由CSDN通过智能技术生成

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的状态

一般操作系统中线程的生命周期是这样的:

a86fc3e50369d048612500979a90b421.png

对应到JAVA中的线程状态则变成了如下图所示。控制流箭头标注了触发状态改变的action。

370aeec8c3c6dd159cf0c821b9f5b81b.png

可以看到这里我没有写RUNNING的状态。其实JAVA中Thread类的定义中也确实没有RUNNING的状态。这不代表线程没有RUNNING状态,只不过在JAVA语言中,没必要特地定义RUNNING状态,只要处于RUNNABLE,后面运行的事情就是OS来管理了。OS会负责将RUNNABLE的JAVA线程进行调度,过程中也可能经历Suspend等状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值