一、概述
JDK本身提供了许多方便的性能调优及监控的小工具,这些小工具虽然没有说是官方的标准工具,但自从Java诞生这么多年,这些工具一直在被人使用,不得不说这是JDK给开发者的福利,这些工具包含但不仅限于:jstack、jps、jmap、jConsole、jstat等等。
由于前些时候用到了jstack这个工具,所以今天来简单总结下jstack的使用。
二、jstack使用
首先,jstack会生成JVM当前时刻的线程快照,然后我们可以通过它查看某个Java进程内的线程堆栈信息,通常来说,当线上CPU使用率较高的时候,我们可以通过jstack查询占用CPU较高的一些线程的使用情况,比如发生了死锁,线程阻塞等相关操作。一般情况下,jstack会配合其他命令一块进行操作,比如top,ps等命令。我们先来看下使用jstack命令的一些步骤。
1. 查询占用CPU最高的进程
首先,我们通过top命令查询当前CPU的使用情况,top命令前面已详细说过,这里不多说,直接输入命令:top
这里我们可以看到各个进程对CPU的使用占比,并且可以根据top相关命令进行排序。
2. 查询该进程下占用CPU最高的线程
接下来我们可以根据进程id查询该进程下占用CPU比较高的线程,输入命令:top -Hp PID,其中PID是上面的那个进程id,比如我们这个的:top -Hp 12386:
如果对PS命令比较熟的,还可以直接通过:ps H -eo pid,tid,pcpu | sort -n -k 3 | tail -10 来定位到相关线程:
如果想看下线程的详细信息,还可以通过:cat /proc/进程号/task/线程号/status来查看。如果需要查询该进程下所有的线程,我们还可以通过pstree命令,以树的形