Arthas thread(查看当前JVM的线程堆栈信息)

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: Arthas thread(查看当前JVM的线程堆栈信息)

image.png

@[toc]

二、命令列表

2.1 jvm相关命令

2.1.2 thread(查看当前JVM的线程堆栈信息)

使用场景
Arthas 中,thread 命令用于查看和分析 JVM 中的线程信息。这个命令提供了关于线程的详细视图,有助于诊断线程相关的问题。以下是 thread 命令的主要使用场景:

  1. 性能问题分析
    • 长时间运行的线程:通过查看线程的状态和运行时间,你可以识别出可能导致性能瓶颈的长时间运行线程。
    • 死锁检测:可以使用 thread 命令检查是否存在线程死锁的情况,并获得有关死锁的详细信息。
  2. 调试线程问题
    • 线程状态:查看线程的状态(如 RUNNABLE、WAITING、BLOCKED 等),帮助理解线程的当前行为和潜在问题。
    • 线程堆栈跟踪:获取线程的堆栈跟踪,分析线程在执行时的调用链,以便识别代码中的问题。
  3. 资源使用监控
    • 线程数:监控 JVM 中的线程总数,确保线程数在合理范围内,防止因线程过多导致的资源耗尽。
    • 线程分布:查看不同线程的数量和状态,评估线程池的使用情况和线程资源的分配。

参数说明:

参数名称 说明 示例
数字 示[数字]线程的运行堆栈 thread 3
[n:] 指定最忙的前N个线程并打印堆栈 threaad -n 3
[b] 找出当前阻塞其他线程的线程 thread -b
[i ] 指定cpu占比统计的采样间隔,单位为毫秒 thread -i 1000 -n 3
当没有参数时,显示所有线程的信息 thread
--state 查看处于线程状态 thread --state WAITING

举例1:展示[数字]线程的运行堆栈,命令:thread 线程ID

基础语法
thread 线程ID
image.png

你看到的输出确实是 Arthas 的 thread 命令的查询结果,实际上它展示了线程的运行堆栈信息,这些信息可以帮助你分析线程的状态和性能瓶颈。以下是你提供的输出的解释:

  • pool-31-thread-43:这是线程的名称。
  • Id=226:这是线程的ID
  • TIMED_WAITING:线程在 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@da1bfc6 上等待某些条件。它通常用于调度任务或线程池中的任务等待执行。
  • Affect(row-cnt:0) cost in 2 ms.:表示查询本身的消耗时间为2毫秒,没有影响到数据库中的行计数。这部分通常表明命令执行的性能影响情况。

如果你看到的线程信息符合预期,但没有显示额外的异常或错误信息,那说明你成功地查询了线程的状态。这些信息对于诊断和分析线程的行为很有帮助。如果你在分析过程中遇到其他问题,可以提供更多细节,以便更好地协助你。

举例2:找出当前阻塞其他线程的线程

基础语法
thread -b

[arthas@18139]$ thread -b
No most blocking thread found!
Affect(row-cnt:0) cost in 178 ms.
[arthas@18139]$

本人其他相关文章链接

1.Arthas 全攻略:让调试变得简单
2.Arthas dashboard(当前系统的实时数据面板)
3.Arthas thread(查看当前JVM的线程堆栈信息)
4.Arthas jvm(查看当前JVM的信息)
5.Arthas sysprop(查看和修改JVM的系统属性)
6.Arthas sysenv(查看JVM的环境变量)
7.Arthas vmoption(查看和修改 JVM里诊断相关的option)
8.Arthas getstatic(查看类的静态属性 )
9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
10.Arthas logger(查看 logger 信息,更新 logger level)
11.Arthas mbean(查看 Mbean 的信息)
12.Arthas memory(查看 JVM 内存信息)
13.Arthas ognl(执行ognl表达式)
14.Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)
15.Arthas vmtool(从 jvm 里查询对象,执行 forceGc)
16.Arthas jad(字节码文件反编译成源代码 )
17.Arthas mc(Memory Compiler/内存编译器 )
18.Arthas redefine(加载外部的.class文件,redefine到JVM里 )
19.Arthas classloader (查看 classloader 的继承树,urls,类加载信息)
20.Arthas sc(查看JVM已加载的类信息 )
21.Arthas sm(查看已加载类的方法信息 )
22.Arthas monitor(方法执行监控)
23.Arthas stack (输出当前方法被调用的调用路径)
24.Arthas trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)
25.Arthas tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)
26.Arthas watch (方法执行数据观测)
27.Arthas profiler(使用async-profiler对应用采样,生成火焰图)

image.png

重要信息

image.png
image.png
image.png

目录
相关文章
|
4月前
|
Arthas 监控 Java
Arthas logger(查看 logger 信息,更新 logger level)
Arthas logger(查看 logger 信息,更新 logger level)
124 6
|
5月前
|
Arthas 监控 Java
Arthas memory(查看 JVM 内存信息)
Arthas memory(查看 JVM 内存信息)
351 6
|
4月前
|
Arthas 监控 Java
Arthas jvm(查看当前JVM的信息)
Arthas jvm(查看当前JVM的信息)
131 17
|
4月前
|
Arthas 监控 Java
Arthas mbean(查看 Mbean 的信息)
Arthas mbean(查看 Mbean 的信息)
136 17
|
4月前
|
Arthas 监控 Java
Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)
Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)
68 15
|
2月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
109 0
|
2月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
3月前
|
Java 数据挖掘 调度
Java 多线程创建零基础入门新手指南:从零开始全面学习多线程创建方法
本文从零基础角度出发,深入浅出地讲解Java多线程的创建方式。内容涵盖继承`Thread`类、实现`Runnable`接口、使用`Callable`和`Future`接口以及线程池的创建与管理等核心知识点。通过代码示例与应用场景分析,帮助读者理解每种方式的特点及适用场景,理论结合实践,轻松掌握Java多线程编程 essentials。
185 5
|
7月前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
189 20
|
7月前
|
安全 Java C#
Unity多线程使用(线程池)
在C#中使用线程池需引用`System.Threading`。创建单个线程时,务必在Unity程序停止前关闭线程(如使用`Thread.Abort()`),否则可能导致崩溃。示例代码展示了如何创建和管理线程,确保在线程中执行任务并在主线程中处理结果。完整代码包括线程池队列、主线程检查及线程安全的操作队列管理,确保多线程操作的稳定性和安全性。