2024年3月30日发(作者:)

周末看到一个用jstack查看死锁的例子。昨天晚上总结了一下jstack(查看线程)、

jmap(查看内存)和jstat(性能分析)命令。供大家参考

1.Jstack

1.1 jstack能得到运行java程序的java stack和native stack的信息。可以轻松得

知当前线程的运行情况。如下图所示

注:这个和thread dump是同样的结果。但是thread dump是用kill -3 pid命令,

还是服务器上面少用kill为妙

1.2 命名行格式

jstack [ option ] pid

jstack [ option ] executable core

jstack [ option ] [server-id@]remote-hostname-or-IP

最常用的还是jstack pid

1.3 在thread dump中,要留意下面几种状态

死锁,Deadlock(重点关注)

等待资源,Waiting on condition(重点关注)

• 等待获取监视器,Waiting on monitor entry(重点关注)

阻塞,Blocked(重点关注)

• 执行中,Runnable

• 暂停,Suspended

• 对象等待中,() 或 TIMED_WAITING

• 停止,Parked

下面有详细的例子讲这种分析,大家参考原著

/zhengyun_ustc/archive/2013/01/06/dumpanalysis.h

tml

1.4 在thread dump中,有几种线程的定义如下

线程名称 所属 解释说明

Attach Listener JVM Attach Listener 线程是负责接收到外部的命令,而对该命令进

行执行的并且吧结果返回给发送者。通常我们会用一些命令去要求jvm给我们一些反馈信

息,如:java -version、jmap、jstack等等。 如果该线程在jvm启动的时候没有初始化,

那么,则会在用户第一次执行jvm命令时,得到启动。