1.问题定位:查看服务器上应用进程的运行情况
ps -ef | grep java 拿到应用进程的pid
2.查看该应用进程的所有线程信息
top -Hp pid 大写的P可以将线程按照CPU使用比例排序
3.查看CPU占用率高的线程的堆栈信息
jstack pid>pid.log 将线程栈dump到日志文件中
jstack 线程ID 可以查看某个线程的堆栈情况,特别对于hung挂死的线程,可以使用选项-F强制打印dump信息jstack -F pid
jstack定义: jstack是java虚拟机自带的一种堆栈跟踪工具。用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
PS : 在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。也就是多进行几次线程快照,观察变化,查看问题所在。
如何使用jstack分析线程状态?
https://www.jianshu.com/p/6690f7e92f27
将线程快照信息上传到下面专门分析的平台上:
https://fastthread.io/
4.分析代码,本地模拟