我的线程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可以发现很多隐秘的性能问题,是定位问题不可多得的好帮手。
加油啊,吴小喵