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

相关推荐
Lyyaoo.7 小时前
【JAVA基础面经】进程安全问题(synchronized and volatile)
java·开发语言·jvm
wgzrmlrm747 小时前
mysql如何配置全文索引停用词_mysql ft_stopword_file设置
jvm·数据库·python
heimeiyingwang8 小时前
【架构实战】JVM调优:GC日志分析与参数调优
jvm·架构
xcjbqd011 小时前
如何修改Oracle服务器默认的日期格式_NLS_DATE_FORMAT全局配置
jvm·数据库·python
xcjbqd012 小时前
SQL中视图能否嵌套存储过程_实现复杂自动化报表逻辑
jvm·数据库·python
l1t12 小时前
DeepSeek总结的PostgreSQL检查点和写入风暴
jvm·postgresql·oracle
摸鱼仙人~12 小时前
OpenCode 长期记忆系统内容整理
jvm
码以致用12 小时前
Java垃圾回收器笔记
java·jvm·笔记
wgzrmlrm7414 小时前
Django怎么优雅发送邮件_Python配置SMTP后端实现异步通知
jvm·数据库·python
凤山老林17 小时前
04-Java JDK, JRE和JVM
java·开发语言·jvm