过程:
- top命令查看占用cpu过高进程,获取PID
- top -H - p PID 获取PID进程中的线程信息 ,按照CPU使用率排序,找到线程号,把线程号转换为十六进制(printf %x 线程号),
- jstack 进程号 | grep 十六进制线程号 >jstack_out.txt ,查看线程信息
- 分析原因
说明:
jstack是jdk的一个命令行工具,可以用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合;生成线程快照的目的是定位线程出险长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿常见原因。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后再做什么事情,或者等待着什么资源。
Linux数的进制转换可以选用printf,例如
十进制的10转换转换为十六进制
printf %x 10
a
十六进制的f转换为十进制
printf %d 0xf
15