jstack分析Java进程信息

 

1.查出当前Java程序的进程ID (19893)

ps -ef|grep javaps -aux|grep java 都是查询进程信息,aux是BSD风格,-ef是System V风格。主要区别是aux会截断command列,而-ef不会。

 

 

2.查看当前进程的各个线程使用情况 

top -Hp {pid} #查看当前进程的线程CPU使用情况

top -Hp 19893   #  (注意这下面的pid 19894 ,19895...26983 则不是进程id了,而是线程ID)

 

3.jstack通过查看进程详情来查看进程里线程的状态

jstack 19893

在top命令中,已经获取到了线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可

nid对应top -Hp 19893命令结果中的某个线程id ,十六进制!

eg: 十六进制:  nid=0x690d   对应 十进制:pid=26893  (第2点图片中最后一行的pid) ,其它线程也是如此对应~

进制转换参考文章https://www.cnblogs.com/summerdata/p/10722144.html

 

dump 文件里值得关注的线程状态有以下几种

死锁: Deadlock(重点关注) 

执行中:Runnable   

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

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

暂停:Suspended

对象等待中:Object.wait() 或 TIMED_WAITING

阻塞: Blocked(重点关注)  

停止:Parked

 

ps: 还需要关注一下 locked信息,locked的对象是否会死锁。

 

知识小分享:

lsof -P {pid} #查看当前进程的引用文件信息
eg: lsof -P 19893

lsof -i:8080 #查看当前端口的网络访问信息
top -Hp {pid} #查看当前进程的线程使用情况 eg: top -Hp 19893

  

 posted on 2020-03-10 16:04  阿叮339  阅读(661)  评论(0编辑  收藏  举报