JVM常用监控工具(3)-jstack

用途说明

jstack 是 JDK 自带的一个工具,用于生成 Java 进程的线程快照(也称为堆栈跟踪)。它可以用于诊断 Java 应用程序中的线程问题,比如死锁、线程阻塞等。下面是 jstack 的基本使用方法:

命令参数

bash 复制代码
Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message

通常用法

bash 复制代码
jstack <pid> > thread_dump.txt

-F 参数代表强制执行

-m 生成带有本地变量和锁信息的线程快照。使用 -m 参数可能会增加线程快照的大小,并稍微增加生成线程快照的时间,但通常这种额外的信息对于定位问题非常有帮助。

线程状态

jstack 输出的线程快照中,线程状态通常以如下几种形式展示:

  1. RUNNABLE(运行状态):表示线程正在 JVM 中执行 Java 代码,或者是等待操作系统调度执行。

  2. BLOCKED(阻塞状态) :表示线程被阻塞,通常是由于它试图获取一个对象的监视器锁(synchronized 代码块或方法)而被其他线程持有该锁,也可能是由于调用了 Object.wait() 方法而进入了等待状态。

  3. WAITING(等待状态) :表示线程正在等待某个条件的发生,如等待另一个线程的通知,或者等待某个条件的满足而进入休眠状态。常见于调用 Object.wait()Thread.join()LockSupport.park() 等方法时。

  4. TIMED_WAITING(计时等待状态) :类似于 WAITING 状态,但是在等待期间指定了超时时间。常见于调用带有超时参数的 Object.wait()Thread.sleep()Thread.join() 等方法时。

  5. TERMINATED(终止状态):表示线程已经执行完成,不再执行任何代码。

通常,我们需要重点关注**BLOCKED(阻塞状态),WAITING(等待状态)的线程,**再结合具体的代码以及业务场景来分析问题。

后面笔者准备出一期实战案例来详细分析排查jvm出现的问题,敬请期待

相关推荐
2501_9411118235 分钟前
使用Python进行网络设备自动配置
jvm·数据库·python
2501_941111244 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
2501_941112145 小时前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python
2501_941111826 小时前
使用Scikit-learn进行机器学习模型评估
jvm·数据库·python
c238566 小时前
C/C++内存管理
jvm
一只会写代码的猫7 小时前
C# 性能优化:从垃圾回收到多线程并发
jvm·算法
2501_9411120710 小时前
深入理解Python的if __name__ == ‘__main__‘
jvm·数据库·python
2501_9411120510 小时前
Python Lambda(匿名函数):简洁之道
jvm·数据库·python
2501_9411112511 小时前
自动化与脚本
jvm·数据库·python
多多*13 小时前
分布式中间件 消息队列Rocketmq 详解
java·开发语言·jvm·数据库·mysql·maven·java-rocketmq