这个java线程堆栈分析神器真好用

简介: 推荐一个java线程堆栈分析神器

作为一个java程序员,日常搬砖过程中是不是经常会遇到死锁的场景,但是一遇到死锁基本上少不了要去看线程的状态。在发生死锁时可以用jstack -l pid来观察锁持有情况。这样的会打印出各个线程堆栈的信息。不过这样查看起来不是很方便。 我们可以导出Thread dump文件然后通过图形化界面来进行分析。

  • 首先我们执行jps 命令可以找到我们程序对应的pid。
  • 然后通过 jstack pid >> 1.txt 导出线程堆栈
  • 然后在通过一个图形化工具IBM Thread and Monitor Dump Analyzer for Java 点击下载打开我们刚才导出的线程堆栈信息

在这里插入图片描述
在这里插入图片描述2.1 线程状态

  • New: 当线程对象创建时存在的状态,此时线程不可能执行;
  • Runnable:当调用thread.start()后,线程变成为Runnable状态。只要得到CPU,就执行;
  • Running:线程正在执行;
  • Waiting:执行thread.join()或在锁对象调用obj.wait()等情况就会进该状态,表明线程正处于等待某个资源或条件发生来唤醒自己;
  • Timed_Waiting:执行Thread.sleep(long)、thread.join(long)或obj.wait(long)等就会进该状态,与Waiting的区别在于Timed_Waiting的等待有时间限制;
  • Blocked:如果进入同步方法或同步代码块,没有获取到锁,则会进入该状态;
  • Dead:线程执行完毕,或者抛出了未捕获的异常之后,会进入dead状态,表示该线程结束

其次,对于jstack日志,我们要着重关注如下关键信息

  • Deadlock:表示有死锁
  • Waiting on condition:等待某个资源或条件发生来唤醒自己。具体需要结合jstacktrace来分析,比如线程正在sleep,网络读写繁忙而等待

Blocked:阻塞

  • Waiting on monitor entry:在等待获取锁in Object.wait():获取锁后又执行obj.wait()放弃锁

一般重点查看“等待资源Waiting on condition”、“wait()”、“阻塞Blocked”。这些是引起CPU高,可能是线程执行有死循环
这个工具还是挺好用的,强烈推荐下。下载地址:https://wwe.lanzouy.com/iUl1Myksjyf

目录
相关文章
|
1天前
|
Java 数据处理 调度
Java多线程编程入门指南
Java多线程编程入门指南
|
2天前
|
监控 安全 算法
如何有效地处理Java中的多线程
如何有效地处理Java中的多线程
|
1天前
|
消息中间件 Java 数据安全/隐私保护
线程间通信的方法与比较分析
线程间通信的方法与比较分析
|
1天前
|
安全 Java 开发者
Java并发编程中的线程安全策略
在现代软件开发中,Java语言的并发编程特性使得多线程应用成为可能。然而,随着线程数量的增加,如何确保数据的一致性和系统的稳定性成为开发者面临的挑战。本文将探讨Java并发编程中实现线程安全的几种策略,包括同步机制、volatile关键字的使用、以及java.util.concurrent包提供的工具类,旨在为Java开发者提供一系列实用的方法来应对并发问题。
8 0
|
1天前
|
监控 Java UED
Java并发编程:深入理解线程池的设计与应用
本文旨在通过数据导向和科学严谨的方式,深入探讨Java并发编程中的关键组件——线程池。文章首先概述了线程池的基本概念与重要性,随后详细解读了线程池的核心参数及其对性能的影响,并通过实验数据支持分析结果。此外,文中还将介绍如何根据不同的应用场景选择或设计合适的线程池,以及如何避免常见的并发问题。最后,通过案例研究,展示线程池在实际应用中的优化效果,为开发人员提供实践指导。
9 0
|
2天前
|
存储 缓存 Java
Java并发编程之线程池的使用
Java并发编程之线程池的使用
|
2天前
|
设计模式 算法 Java
java策略模式简单分析
java策略模式简单分析
4 0
|
2天前
|
安全 Java 调度
精通Java中的线程同步与互斥
精通Java中的线程同步与互斥
|
3天前
|
存储 测试技术
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
10 0
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
|
4天前
|
数据采集 Java Unix
10-多线程、多进程和线程池编程(2)
10-多线程、多进程和线程池编程