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命令时,得到启动。


发布评论