千家信息网

Java中怎么利用 jstack分析线程状态

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本篇文章给大家分享的是有关Java中怎么利用 jstack分析线程状态,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。jstck 是什么?
千家信息网最后更新 2025年01月24日Java中怎么利用 jstack分析线程状态

本篇文章给大家分享的是有关Java中怎么利用 jstack分析线程状态,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

jstck 是什么? 这个是 Oracle JDK 默认包含的一个用于打印执行 Java 进程的当前线程栈信息的工具。官方是这样介绍的:

jstack prints Java stack traces of Java threads for a given Java process or core file or a remote debug server. For each Java frame, the full class name, method name, 'bci' (byte code index) and line number, if available, are printed.

注意其中几个关键点:每一个 Java Frame 的全类名,方法名,如果能拿到行号的话还会显示行号。看过前面介绍调试技巧那篇文章(80%的程序员都不了解的调试技巧)的朋友可能还记得,其中有一个功能是Drop Frame, 来实现后退执行。和这里的是一个地方,都对应线程中的一级调用。

使用 jstack 打出来的信息,和一般应用遇到异常时的 printStackTrace 基本一样,只是那只是一个线程调用链的,这里通过工具,可以把应用内所有线程都打出来。

用法

使用方式和一般的 Java 分析工具类似,都是通过

命令名 <可选参数> + pid(进程id)

这种格式使用。比如对于 jstack, 一般可以直接 jstack 应用pid 即可。这里 pid 可以通过Java的 jps 工具获取,也可以通过 Linux 下的ps 工具和 Windows 下的任务管理器获取。

输出

我们以一个Tomcat进程为例,输出类似这样:

我们看上面的几个框:

最上方左侧,是当前线程的线程名称,可以根据此来在应用内大量的线程中找到我们关心的线程正在执行的操作。例如 Tomcat 一般 http-port -x 这种线程是请求的处理线程,页面响应慢的时候,可以直接找这一类线程。

随着请求的增多,线程数也会很多。所以一般多线程应用开发,一个好的实战建议是为创建的线程起一个有意义的名字,否则打出来的 stack 里大量的 thread -1, thread -2 这种,天晓得哪一个才是你的。

第二行的框内内容,表示当前线程的执行状态,是运行状态还是TIME_WAITING,还是等待锁等,可以根据线程状态来了解。

第三个大框中的内容就和我们异常时输出的 stackTrace 一样,是当前代码的调用链。

第四个框中的内容,是当前线程挂的锁的情况。

上面的截图,是没有锁互相占用的情况下的输出。如果一个多线程中有锁等待时,会有类似这样的输出:

注意,此时线程状态变成了 BLOCKED, 同时,在线程的调用链中,有一个waiting to lock 的输出, 同时,在下方持胡锁的线程中,会有一个 lock xxx,这个是当前锁对象,通过这个就可以看出当前还有哪些线程在等待同一个锁。

所以回到前面的问题,如果此时因为锁占用导致的,可以从输出中看到,同时如果是数据库连接池满了,线程就会停在数据库连接的操作上,在 stackTrace 中一眼就能看的出来,甚至网络 Socket 读取之类的在等待,都会在调用链中体现出来,从而可以快速的定位问题,解决问题。

以上就是Java中怎么利用 jstack分析线程状态,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

线程 输出 状态 工具 应用 分析 内容 同时 篇文章 进程 问题 信息 只是 可以通过 情况 技巧 数据 数据库 更多 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 sql 服务器下载 山西gpu服务器租赁报价 战地1什么服务器外挂少 游戏服务器分区是什么 数据库技术在各行业的应用 委托软件开发软件源码归属 以下关于分布式数据库 计算机网络技术有哪些应用 怎样设置更改数据库编码 陕西艾尚客网络技术有限公司 枣庄软件开发哪家便宜 b站数据库分析 国研网数据库的用途和优势 国家的网络安全宣传周是什么时候 部队网络安全问卷调查 u30网络异常无法连接服务器 一列和另一列相同的数据库 慧与大数据库 创建数据库使用的工具是什么 郑州科超网络技术合伙企业 gmail邮件服务器设置 数据库关系运算更名 数据库误删除后如何恢复 天津网络时钟同步服务器 上海潮流软件开发服务标准 c 连接数据库 删改 郭胜华保护中国网络安全 一列和另一列相同的数据库 大连地区的软件开发公司 六盘水市网络安全宣传周
0