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

用途说明

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

命令参数

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

通常用法

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出现的问题,敬请期待

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值