我的线程dump实践——jstack

第一步,查询java进程,使用jps命令,我的服务器上只有一个进程号为22625的java进程

 

 

第二步,使用top命令查看系统资源的使用情况,使用系统资源最高的也是这个22625进程

 

 

 

第三步,导出指定进程pid所有线程信息

-l的意思是打印所有线程信息,重定向到jvm_22625.log这个文件

 

 

 

第四步,分析

线程状态介绍
  • 死锁,Deadlock(重点关注) :一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。

  • 等待资源,Waiting on condition(重点关注) :等待资源,或等待某个条件的发生。
  • 等待获取监视器,Waiting on monitor entry(重点关注)

第五步,对进程中的线程进行分析

top -H -p 22625

 

 

找出资源消耗最高的线程号转成16进制后,在dump的文件中进行搜索定位分析

 

在Java应用的性能测试中,很多性能问题可以通过观察线程堆栈来发现,Jstack是JVM自带dump线程堆栈的工具,很轻量易用,并且执行时不会对性能造成很大的影响。灵活的使用jstack可以发现很多隐秘的性能问题,是定位问题不可多得的好帮手。

posted @ 2020-08-21 15:08  wuxiaomiao  阅读(318)  评论(0编辑  收藏  举报